为什么写入二进制文件会从任何地方写入一个字节

Why does writing to binary file writes one byte from no where

我有一个 class 用于将字节写入二进制文件

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”)。

如有任何想法,我们将不胜感激!

二进制 10100x0a 换行符。您在打开文件时未指定应以二进制模式打开文件。

在 Windows 上,当您将换行符写入文本模式文件时,它会将其转换为 cr/lf 序列。 cr return 是 0x0d,它是二进制 1101.

指定文件应该以二进制模式打开:

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