为什么写入二进制文件会从无处写入一个字节

时间:2017-04-27 13:23:10

标签: c++ binary bin

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

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

任何想法都将不胜感激!

1 个答案:

答案 0 :(得分:0)

二进制10100x0a这是换行符。您没有指定应以二进制模式打开文件,而是对文件进行开放。

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

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

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