2

unsigned chars を stringstream に書き込もうとしています。

書き込む必要がある情報には 0x00 が含まれています。0 から 40 までの値を ASCII 文字ではなく、実際の数値として書き込む必要があります。

編集: 明確にするために、0 ~ 40 の値以上のものを書いています。バイナリである必要があります。入ってくるものは、ストリームに書き込まれると文字に変換されるのではなく、そのままにしておく必要があります...

以下は私がやっていることの要旨です。

TCHAR _buffer[2];    // This is part of the problem, I figure, since its a char
_buffer[0] = 0x00;
_buffer[1] = 0x01;

tstringstream s;

s.write(_buffer, sizeof(_buffer));

最終的に何が起こるかというと、0x00 によって文字列ストリームが終了し、0x01 がそこに到達しないようです。

私は同様の方法で読んでいます:

stream.readsome(_buffer, sizeof(_buffer));

0x00 が書き込まれ、すべてが終了してしまうため、うまくプレイしたくないようです。

それはまさにその通りですか、それとも何かが足りないのですか?ios_base::binary を使用してみました。また、TCHAR の代わりに uint8_t を使用してみましたが、キャストなどの混乱が生じているようです。これが必要なルートかもしれないのではないかと心配していますが、実行する前に確認したいと思います.

簡単に言うと、C# の BinaryReader/Writer に相当する C++ を見つけようとしています。

ありがとう!

4

1 に答える 1

0

以下はVS2012でコンパイルされました:

#include <iostream>
#include <sstream>
#include <string>

int main()
{
    wchar_t buf[] = { 0x0, 0x1, 'a', 'b', 'c' };

    std::wstring s(buf);

    std::wstringstream ss;

    ss.write(buf, 5);

    const std::wstring& chars = ss.str();

    for (std::wstring::const_iterator it = chars.begin(); it != chars.end(); ++it)
        std::cout << std::hex << *it << '\n';

}

与える

0 1 61 62 63 続行するには何かキーを押してください。. .

私はあなたが望むものだと思います。

于 2012-11-01T19:26:16.613 に答える