В строке myfile.write(StartAddr,streamoff (16) );
вы указываете объекту myfile записать 16 байтов в поток, начиная с адреса StartAddr
. Представьте, что StartAddr
- это массив из 16 байтов:
char StartAddr[16] = "1000\0\0\0data.b32\0";
myfile.write(StartAddr, sizeof(StartAddr));
Будет генерировать вывод, который вы видите. Не видя объявления / определения StartAddr, я не могу сказать наверняка, но, похоже, вы пишете пятибайтовую строку с нулевым завершением "1000"
, за которой следует то, что происходит в следующих 11 байтах после StartAddr. В этом случае появляется пара нулевых байтов, за которыми следует постоянная строка с нулевым окончанием "data.b32"
(которую компилятор должен поместить где-то в памяти) - это то, что следует за StartAddr.
Несмотря ни на что, ясно, что вы перегрузили буфер.
Если вы пытаетесь записать 16-битное целочисленное значение в поток, у вас есть пара опций, обе из которых основаны на том факте, что в байте обычно 8 бит. Самым «чистым» будет что-то вроде:
char x = (StartAddr & 0xFF);
myfile.write(x);
x = (StartAddr >> 8);
myfile.write(x);
Предполагается, что StartAddr является 16-разрядным целочисленным типом и не учитывает возможный перевод (например, потенциальное преобразование значения 10 [перевод строки) в последовательность возврата каретки / перевода строки).
Кроме того, вы можете написать что-то вроде:
myfile.write(reinterpret_cast<char*>(&StartAddr), sizeof(StartAddr));