Я пытаюсь записать неподписанные символы в поток строки.
Информация, которую мне нужно написать, включает в себя 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 #.
Спасибо!
Следующее скомпилировано на 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
Нажмите любую клавишу для продолжения . , ,
Что я думаю, что вы хотите.
Других решений пока нет …