Я пытаюсь записать только данные 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 (), но, кажется, ничего не работает. Кто-нибудь знает, что с этим не так?
Спасибо
ofstream f;
f.open("my.bin",std::ofstream::binary);
uint32_t data=0x00000100;
f.write((char*)&data,sizeof(data));
<<
операторы форматируют в текст. Если вы хотите двоичный формат,
вам придется отформатировать вручную в 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()
.)