バイナリデータ{ 4, 5, 0, 6, 7, }をCStringにしたいのですが、5までしか変換できません。
途中に入っている0のせいだと思うのですが、0も含めて変換したい場合はどうすればいいのでしょうか?
以下のソースはバイナリデータをCStringとstringで相互変換しようとしています。
c++
1 char n[] = { 4, 5, 0, 6, 7, }; 2 int size = sizeof(n); 3 CString cstring(n, size); // charから直接変換 失敗 4 std::string str(n, n + size); // charから直接変換 成功 5 6 // string -> CString変換 7 CString str_a; 8 str_a = CA2W{ str.c_str(), CP_UTF8 }; 9 10 // CString -> string変換1 11 std::string str_b{ CW2A{ str_a.GetBuffer(5), CP_UTF8 } }; 12 13 // CString -> string変換2 14 std::string str_c{ CW2A{ cstring.GetBuffer(5), CP_UTF8 } }; 15 16 cstring.ReleaseBuffer(); 17 str_a.ReleaseBuffer();
コメントを受けて少し前進しました。0以降も取得変換できたものの
途中から 0x4 が、 0x04, 0x00と2バイトに。
最後のstd::string strに変換する際は、1バイトに戻ってほしいのですが、
char n[] = { 4, 5, 0, 6, 7, }; int size = sizeof(n); CString cstring(n, size); // charから直接変換 int nByteNum= cstring.GetLength() * sizeof(TCHAR); // CString -> string変換 char* pref = (char*)cstring.GetBuffer(nByteNum); std::string str(pref, pref+nByteNum);
std::stringとCString相互の変換を問題にしているのか、それともUTF8への変換を問題にしているのか、どちらなのでしょうか。std::stringもCStringも、内部では'\0'を含めてすべてのデータを収容できます。
std::stringとCString相互の変換で、別にUTF8でなくてもいいです。
回答2件
あなたの回答
tips
プレビュー