Почему запись в двоичный файл записывает один байт из ниоткуда

У меня есть класс для записи в байтах в двоичный файл

class BITWRITER{
public:
ofstream OFD;
char var;
int x;
BITWRITER(char* pot){
OFD.open(pot);
x = 0;
var  =0;

}
void WRITE(bool b){
var ^= (-b^var)&(1 << x);
x++;
if(x == 7){
OFD.write(&var, 1);
x = 0;
var = 0;
}

}
}

И мой пример кода:

string bitCode = "0001010";
bool BitIsOne = false;
BITWRITER *write= new BITWRITER("out.bin");
for(int i =  bitCode.length()-1 ; i >= 0; i--){
if(bitCode[i] == '1')
BitIsOne=true;
else
BitIsOne=false;
write->WRITE(BitIsOne);
}
delete write;

Что я не понимаю, так это то, почему, когда я запускаю этот точный код, когда я затем в следующий раз читаю этот файл, вместо того, чтобы иметь в двоичном файле только один байт, у меня есть два байта.

В этом примере вывод должен быть
«1010», но перед этим каким-то образом создается один случайный байт («1101»).

Любые идеи были бы хорошы!

0

Решение

двоичный 1010 является 0x0a который является новой строкой. Вы открываете файл, не указывая, что он должен быть открыт в двоичном режиме.

В Windows, когда вы пишете новую строку в файл текстового режима, он переводит его в последовательность cr / lf. Возврат cr равен 0x0d, который является двоичным 1101,

Укажите, что файл должен быть открыт в двоичном режиме:

OFD.open(pot, ios::binary);
0

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

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

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector