Чтение/запись байтов без знака с помощью std::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, а также пытался использовать uint8_t вместо TCHAR, но это, похоже, создает беспорядок приведения и тому подобное. Я боюсь, что это может быть тот маршрут, который требуется, но я хочу быть уверен, прежде чем идти делать это.

Короче говоря, я пытаюсь найти С++, эквивалентный С# BinaryReader/Writer.

Спасибо!


person user1792208    schedule 01.11.2012    source источник


Ответы (1)


На 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 Нажмите любую клавишу, чтобы продолжить. . .

Что я думаю, это то, что вы хотите.

person Pete Barber    schedule 01.11.2012
comment
Что ж, это, конечно, интересно, у меня тоже такое есть. Возможно, я поторопился и не должен доверять тому, что показывает отладчик. Тогда возможно, что проблема на самом деле заключается в другом, возможно, из-за приведения строк, которое я делаю позже, когда я считываю значения обратно... - person user1792208; 01.11.2012