私は、unsigned char
(WinAPIでは)とchar
ポインタの違いを少し混同しています。符号なしの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());
}
質問:
すべての可能な場合のために
LPCSTR
からBYTE*
からCスタイルのキャスト(const char*
)安全ですか?アレイデータをワイド文字列に変換するときに実際に追加する必要がありますか?
変換ルーチン
CStringW((LPCWSTR)copiedArray.GetData())
は私には無効に見えますが、それは本当ですか?このコードをすべて理解しやすく保守する方法はありますか?