C++ 使用std::stringstream读取/写入无符号字节

C++ 使用std::stringstream读取/写入无符号字节,c++,stringstream,binaryreader,binarywriter,C++,Stringstream,Binaryreader,Binarywriter,我正在尝试将未签名字符写入stringstream 我需要写入的信息包含0x00。我需要将0到40的值作为实际数字值写入,而不是ASCII字符 编辑:为了澄清,我写的不仅仅是0-40的值。它需要是二进制的。这些输入的东西需要保持原样,而不是在写入流后变成字符 下面是我正在做的事情的jist TCHAR _buffer[2]; // This is part of the problem, I figure, since its a char _buffer[0] = 0x00; _buff

我正在尝试将未签名字符写入stringstream

我需要写入的信息包含0x00。我需要将0到40的值作为实际数字值写入,而不是ASCII字符

编辑:为了澄清,我写的不仅仅是0-40的值。它需要是二进制的。这些输入的东西需要保持原样,而不是在写入流后变成字符

下面是我正在做的事情的jist

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导致stringstream结束,而0x01似乎永远不会到达那里

我以类似的方式阅读:

stream.readsome(_buffer, sizeof(_buffer));
而且它似乎不想玩得很好,因为正在编写0x00,导致整个过程刚刚结束

是这样,还是我遗漏了什么?我尝试过使用ios_base::binary,也尝试过使用uint8_t而不是TCHAR,但这似乎会造成铸造等方面的混乱。我担心这可能是必需的路线,但我想在开始之前确定一下

长话短说,我试图找到一个与C++的二进制读写器等价的C++。


谢谢

以下内容在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';
#包括
#包括
#包括
int main()
{
wchar_t buf[]={0x0,0x1,'a','b','c'};
标准::wstring s(buf);
std::wstringstream ss;
写(buf,5);
常量std::wstring&chars=ss.str();
对于(std::wstring::const_迭代器it=chars.begin();it!=chars.end();++it)

std::cout-Well,这当然很有趣,因为这也是我所拥有的。可能是我跳了枪,不应该相信调试器中显示的内容。那么问题可能实际上存在于其他地方,可能是因为我稍后读取值时进行的字符串转换。。。