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

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

Спасибо!

2

Решение

Следующее скомпилировано на 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
Нажмите любую клавишу для продолжения . , ,

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

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]