2013-05-15 106 views
0

我不确定发生了什么,但是我正在使用ofstream对象以二进制模式写入文件。为什么我正在编写打印乱码的文件?

我写一个字节到一个文件,但该文件被打印乱码。它的打印这种类型的废话:ôß

我有一个名为ByteOutput了一个名为inByte功能类中定义为这样:

void inByte(int byte) 
{ 
    ostreamObj.write(&buffer, byte & 255); 
} 

&buffer是我使用的存储字节一点缓冲的引用数据

在我的主,我定义了一个ofstream的OBJ和使用打开的文件的二进制:

obj.open("tester", std::ios::binary); 

我写一个字节的数据,使用使用ByteOutput对象的文件:

writeObj.inByte(1001011); 

然而,当我检查的文件,它是所有的象形文字。它不显示字母K,其二进制演示1001011.

我在做什么错?

+5

'INT A = 1001011'。 “a”的价值是什么?它是'1001011'而不是'75'。 – gongzhitaao

+0

您应该传递写入函数的字符数,而不是'byte&255'。 – chris

+0

@克里斯,该指令规定我必须写“最”显著字节到ostream的,这就是为什么我'字节和255' – Pangu

回答

1

如果你想使用的二进制,考虑hexstd::bitset

#include <bitset> 
#include <iostream> 
using namespace std; 

int main() 
{ 
    int a = 0x4B; // 01001011 
    bitset<8> bs(a); 
    cout << hex << a << endl; 
    cout << bs << endl; 
} 

如果输出std::bitset到一个文件中,每个比特将被表示为一个char,即,你会看到01001011在你的文件。

+0

实际上,从二进制到十六进制的'01001011'是'0x4B' – leemes

+0

@leemes谢谢。我的错。 – gongzhitaao

2

writeObj.inByte(1001011); 

一个整数= 1001001小数调用函数,而不是二进制的。

+0

头文件包含'inByte'方法的'int'类型的参数。如何测试以确保该方法确实将一个字节的数据写入文件? – Pangu

+0

传递一个字节给它,而不是一个int ...分别考虑数字和它们的(书写)表示。 1001011是一个十进制表示(它只包含0,1不会改变这个事实)。 – leemes

+0

@leemes,我从它的二进制表示中理解了一个数字,但我不理解要将什么传入写入函数的参数来向文件中写入一个字节 – Pangu

相关问题