我在程序中用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的内部实现又是什么样的,总之能解决问题就行,急呀!!!!
解决方案 »
- 关于窗体分割的问题,我现在用CSplitterWnd
- 如何让一个对话框在主对话框前显示?
- _endthreadex与CloseHandle的区别
- 删除txt 指定的文本
- 老问题:自编的CHtmlView浏览器,怎么截获超连接,不让新窗口在IE中打开?
- 问个关于*号和mul
- 困绕我的一个问题:有关网络通信方面编程的,我老师让我做的一个课题,有知道的或知情的是否能够给我指点一下?可以再加分.
- 请问哪里有Win32 SDK 的帮助文档下载
- 怎样定义自己写的类的类名?
- 很多字符串前都有_T能讲讲他的作用吗?
- 请教一个关于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);
}
}