rhapsody — запись 32-битных двоичных данных в файл с использованием ofstream в Stack Overflow

Я пытаюсь записать только данные uint32_t в файл .bin. Я начинаю с открытия потока файлов, который я объявляю двоичным.

  `hartInStream.open (hartFileToWrite.c_str(), std::ifstream::binary);
if(!hartOutStream.is_open())
{
printf("Something in outstream went wrong.\n");
}
else
{
printf("Yippy! it outstream worked!\n");
printf("---------Starting to read-------------\n");}`

Затем я беру данные, которые пытаюсь записать, в данном случае это «данные» uint32_t, распечатываю их и записываю в конец моего файлового потока.

printf(" Reading %lu from HART at %d-%d-%d\n", data, (int)addr1, (int)addr2, (int)addr3 );

Наконец я добавляю данные

hartOutStream<<data;

Я знаю, что я должен писать 0x00 0x00 0x01 0x00 (256) как первые 4 байта, но я пишу
32 35 36 — это шестнадцатеричный эквивалент ascii charters для 256. (с помощью программы просмотра файлов HxD)

Я подозреваю, что проблема в << Оператор, где он типизирует его в ascii. Я пробовал Typecasting, функция atoi (), но, кажется, ничего не работает. Кто-нибудь знает, что с этим не так?

Спасибо

1

Решение

ofstream f;
f.open("my.bin",std::ofstream::binary);
uint32_t data=0x00000100;
f.write((char*)&data,sizeof(data));
5

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

<< операторы форматируют в текст. Если вы хотите двоичный формат,
вам придется отформатировать вручную в std::vector<char>, затем
запиши это, используя std::ostream::write(), Что-то вроде:

std::vector<char> buf;
buf.push_back( (data >> 24) & 0xFF );
buf.push_back( (data >> 16) & 0xFF );
buf.push_back( (data >>  8) & 0xFF );
buf.push_back( (data      ) & 0xFF );
hartOutStream.write( buf.data(), buf.size() );

(Если вы используете более старый C ++, вам может потребоваться написать
&buf[0], скорее, чем buf.data().)

1

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