我对unsigned char
(也是WinAPI中的)和char
指针之间的差异有点困惑。无符号字符和char指针之间的区别
目前我正在与一些基于ATL的旧代码工作,我看到很多表情像下面这样:
CAtlArray<BYTE> rawContent;
CALL_THE_FUNCTION_WHICH_FILLS_RAW_CONTENT(rawContent);
return ArrayToUnicodeString(rawContent);
// or return ArrayToAnsiString(rawContent);
现在,ArrayToXXString
的实现看看下面的方法:
CStringA ArrayToAnsiString(const CAtlArray<BYTE>& array)
{
CAtlArray<BYTE> copiedArray;
copiedArray.Copy(array);
copiedArray.Add('\0');
// Casting from BYTE* -> LPCSTR (const char*).
return CStringA((LPCSTR)copiedArray.GetData());
}
CStringW ArrayToUnicodeString(const CAtlArray<BYTE>& array)
{
CAtlArray<BYTE> copiedArray;
copiedArray.Copy(array);
copiedArray.Add('\0');
copiedArray.Add('\0');
// Same here.
return CStringW((LPCWSTR)copiedArray.GetData());
}
所以,问题:
是从
BYTE*
的C样式转换到LPCSTR
(const char*
)安全的所有可能的情况?是否真的需要添加double将数组数据转换为宽字符串时是否为空终止?
转换例程
CStringW((LPCWSTR)copiedArray.GetData())
对我来说似乎是无效的,这是真的吗?任何方式使所有这些代码更容易理解和维护?