【发布时间】:2017-04-27 13:23:10
【问题描述】:
我有一个将字节写入二进制文件的类
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”)。
任何想法都将不胜感激!
【问题讨论】:
-
var是什么类型,sizeof(var)是什么? -
var 是 char 。和普通字符一样大小是 1 个字节。
-
var 和 x 的初始值是多少?
-
更新了上面的类。我注意到这只是一种情况,当我想写某些位时。查看 ASCII 表,“\n”是否需要“\r”或其他东西才能自动生成?因为 1010 是 "\n" 而 1101 是 ASCII 中的 "\r"。