【发布时间】:2012-03-02 23:26:08
【问题描述】:
我对@987654321@(在WinAPI 中也是BYTE)和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*到LPCSTR(const char*) 的C 风格转换是否适用于所有可能的情况?数组数据转换为宽字符串时,是否真的需要添加double空终止符?
转换例程
CStringW((LPCWSTR)copiedArray.GetData())对我来说似乎无效,是真的吗?有什么方法可以让所有这些代码更易于理解和维护?
【问题讨论】:
标签: c++ char byte atl unsigned-char