我在程序中用unsigned char型实现一些操作,然后将unsigned char型结果通过编辑框显示出来,也就是将unsigned char转化为CString,想用的时候再将CString转化为unsigned char;
但现在我遇到转化会发生问题,因为结果总是不对。
我的转化过程: unsigned char char_tep[10]="refrefre";
CString str_tep;
str_tep.Format("%s",(char*)char_tep); 往回转化是 string str=str_tep.GetBuffer(0);
unsigned char *kkk=(unsigned char *)str.c_str();我认为问题发生在越界上面 unsigned char 范围0~255 char -128~ 127
当unsigned char 大于128时,会是怎样呀,
还有CString的内部实现又是什么样的,总之能解决问题就行,急呀!!!!
但现在我遇到转化会发生问题,因为结果总是不对。
我的转化过程: unsigned char char_tep[10]="refrefre";
CString str_tep;
str_tep.Format("%s",(char*)char_tep); 往回转化是 string str=str_tep.GetBuffer(0);
unsigned char *kkk=(unsigned char *)str.c_str();我认为问题发生在越界上面 unsigned char 范围0~255 char -128~ 127
当unsigned char 大于128时,会是怎样呀,
还有CString的内部实现又是什么样的,总之能解决问题就行,急呀!!!!
解决方案 »
- 我用同步阻塞的Socket,我中间想退出程序,请问我怎么停止阻塞的Socket?
- 菜鸟问一个在CView里生成控件的问题
- OCCI getString failed
- 三喜临门!散分1000!——1
- 100分求:如何对html文件进行解析,使其可以像FrontPage里的“普通”视图一样可以自由的进行实物编辑?
- 请问程序中的extern "C" 都起到了什么作用?他是在编译时起作用还是运行时起作用?
- 怎样得到EXE文件运行的当前路径??
- 在所编写的抓包程序中怎样进行域名解析(IP地址到域名的)?
- 有关使用CArray模板类的问题。急!急!急!
- 关于csdn的《专家门诊离线浏览器》
- 请教一个关于HTML HELP WORKSHOP制作帮助文件显示背景图片的问题
- 有点糊涂了, 字符串常量,会加‘\0’,但是用 string 类实例化的字符串对象,末尾加'\0'表示结束吗?
void wchar2char( char * dest, wchar_t * src, int lim)
{
int nResult; nResult = WideCharToMultiByte(
CP_ACP,
0,
src,
wcslen(src)+1,
dest,
0,
NULL,
FALSE);
if(nResult > 0)
{
nResult = WideCharToMultiByte(
CP_ACP,
0,
src,
wcslen(src)+1,
dest,
nResult,
NULL,
FALSE);
}
}void char2wchar( wchar_t * dest, char * src, int lim)
{
int nResult;
nResult = MultiByteToWideChar(
CP_ACP,
MB_PRECOMPOSED,
src,
strlen(src)+1,
dest,
0);
if (nResult > 0)
{
nResult = MultiByteToWideChar(
CP_ACP,
MB_PRECOMPOSED,
src,
strlen(src)+1,
dest,
nResult);
}
}
CString str_tep;
str_tep.Format("%s",(char*)char_tep);
string str=str_tep.GetBuffer(0);
unsigned char *kkk=(unsigned char *)str.c_str();
cout<<kkk;
建议你用TCHAR
这个位置怎么转化也转化不了,改为:
string str=str_tep.GetBuffer(str_tep.GetLength());
你将unsigned char *kkk 转换为(char*)kkk 试试另外建议用CString 的getlength()函数得到字符串的长度
CString 到 unsigned char
通过memcpy来进行转换 转换后长度为getlength的长度
若数组为定长
可以
unsigned char arr[20];
CString str;
strcpy(arr, str);//把CString类型的字符放到一个字符型数组中
若为不定长,可以用new动态分配
char *arr = new char[str.GetLength()+1]; unsigned char->CString
unsigned char arr[20]";
CString str;
str.Format("%s",str);
CString->TCHAR*的转化可以用函数GetBuff()函数原型为:LPTSTR GetBuffer( int nMinBufLength );
CString str("CString");
TCHAR* szMsg = new TCHAR[100];
//其参数为CString字符串的长度
szMsg = str.GetBuffer(str.GetLength());
str.ReleaseBuffer();
delete []szMsg;
szMsg = NULL;TCHAR*->CString的转化TCHAR szTchar[18] = L"TCHAR";
CString str;
str.Format(_T("%s"),szTchar);
CString无论是CStringA还是CStringW,其构造函数或者等号都能完美就收unsigned char类型!
unsigned char *st = “12345”;
CString str(st);或者CString str = st;完美!!!反过来,你直接传指针干嘛!!CString内部自动增长,unsigned char可不行,要用你也得先分配好TCHAR再用
memcpy(st,str.GetString(),str.GetLength()*sizeof(TCHAR));这样才安全,否则可能改动CString类的内部!!!同时TCHAR处理了多字节与宽字节。前面几位都在干嘛呢?
那个说编码转换的……与其用你的函数不如用API,再说CString的构造函数的存在根本就不需要你亲自调用API!
unsigned char *kkk=(unsigned char *)str.c_str();我就没见过这种用法,连std::string都出来了?mfc程序里标准库根本不应该出现,因为mfc的类功能上远强于标准库……你什么意思呢?与其用string中转,不如直接分配unsigned char的空间了,如果CString是UNICODE,即CStringW,无法直接赋给unsigned char,你也应该用CStringA中转!然后用memcpy或strcpy复制GetBuffer或者GetString的内容
http://download.csdn.net/source/1652340
void wchar2char( char * dest, wchar_t * src, int lim)
{
int nResult; nResult = WideCharToMultiByte(
CP_ACP,
0,
src,
wcslen(src)+1,
dest,
0,
NULL,
FALSE);
if(nResult > 0)
{
nResult = WideCharToMultiByte(
CP_ACP,
0,
src,
wcslen(src)+1,
dest,
nResult,
NULL,
FALSE);
}
} void char2wchar( wchar_t * dest, char * src, int lim)
{
int nResult;
nResult = MultiByteToWideChar(
CP_ACP,
MB_PRECOMPOSED,
src,
strlen(src)+1,
dest,
0);
if (nResult > 0)
{
nResult = MultiByteToWideChar(
CP_ACP,
MB_PRECOMPOSED,
src,
strlen(src)+1,
dest,
nResult);
}
}