( WinAPIにunsigned char
もあります)とポインタの違いに少し混乱しています。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());
}
だから、質問:
Cスタイルのキャストfrom
BYTE*
からLPCSTR
(const char*
)は、考えられるすべてのケースで安全ですか?配列データをワイド文字列に変換するときに、二重のヌル終了を追加する必要が本当にありますか?
変換ルーチン
CStringW((LPCWSTR)copiedArray.GetData())
は私には無効に思えますが、それは本当ですか?このすべてのコードを理解し、維持しやすくする方法はありますか?