我有一个用于将字节写入二进制文件
的类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 :(得分:0)
二进制1010
是0x0a
这是换行符。您没有指定应以二进制模式打开文件,而是对文件进行开放。
在Windows上,当您将新行写入文本模式文件时,它会将其转换为cr / lf序列。 cr返回值为0x0d,这是二进制1101
。
指定应以二进制模式打开文件:
OFD.open(pot, ios::binary);