为什么写入二进制文件会从任何地方写入一个字节
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”)。
如有任何想法,我们将不胜感激!
二进制 1010
是 0x0a
换行符。您在打开文件时未指定应以二进制模式打开文件。
在 Windows 上,当您将换行符写入文本模式文件时,它会将其转换为 cr/lf 序列。 cr return 是 0x0d,它是二进制 1101
.
指定文件应该以二进制模式打开:
OFD.open(pot, ios::binary);
我有一个 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”)。
如有任何想法,我们将不胜感激!
二进制 1010
是 0x0a
换行符。您在打开文件时未指定应以二进制模式打开文件。
在 Windows 上,当您将换行符写入文本模式文件时,它会将其转换为 cr/lf 序列。 cr return 是 0x0d,它是二进制 1101
.
指定文件应该以二进制模式打开:
OFD.open(pot, ios::binary);