如何正确地将无符号字符转换为CString,并再次将CString的结果反向转换为无符号字符

How to correctly convert unsigned char to CString and once again, reversely convert to the result of CString to unsigned char?

本文关键字:字符 转换 无符号 CString 结果 正确地      更新时间:2023-10-16

我在将无符号字符转换为CString以及将转换后的CString的结果转换为无符号字符时遇到问题。

首先,我尝试使用CString.append();。

///////////////////////////

CString result2;
CString result3;
unsigend char unchar_result[9];
unchar_result = {143, 116, 106, 224, 101, 104, 57, 157};
unchar_result[8] = NULL;
for(int i=0; i<8; i++){
     result2=(char)temp[i];
     result3.append(result2);
}

//////////////////////////

因此,我认为结果3被正确地替换了。

如果我通过ASCII代码看到了"unchar_result",那么unchar_result="?tj?eh9?",结果3也是"?tj?eh9"。

但我想将(CString)result3反向转换为无符号字符矩阵。

unsigned char a;
unsigned char testdecode[8];
for(int i=0; i<8 ; i++){
  a=result3.GetAt(i);
  testdecode[i]=a
}

转换后,结果为"?tj?eh9?",但值为{63111610663101104157263}。。。我预计结果是{14311610622410110457/157}。

接下来,我再次尝试使用CStringA。

CStringA result6;
result6(unchar_result);

我可以通过调试工具的局部变量窗口看到这个值。然后,结果6是"뢶jh9앀儆?"此外,int len=result6.GetLength()=13。

如何正确地将无符号字符转换为CString并进行反向转换?

转换为CString非常容易,只需将unsigned char*传递给c'tor即可。从CStringunsigned char*的转换需要更多的工作,请参阅下文。

unsigned char orig[] = "hello world";
std::cout << orig << " (unsigned char *)" << std::endl;
// Convert to a CString
CString cstring(orig);
std::cout << cstring << " (CString)" << std::endl;
// Convert to a unsigned char*
const size_t newsize = (cstring.GetLength() + 1);
unsigned char* nstring = new unsigned char[newsize];
strcpy_s((char*)nstring, newsize, cstring);
std::cout << nstring << " (unsigned char*)" << std::endl;

看看文档,您可以从指向字符缓冲区MSDN的指针构造CString。CString类支持的所有操作,您可以使用GetBuffer,函数来获取指向CString内部缓冲区的指针,调用ReleaseBuffer来获得该缓冲区的所有权。