使用write()将无符号字符写入二进制文件

时间:2011-08-09 12:10:41

标签: c++ file-io binary

我正在编写一个读取二进制文件的程序。因此,我将单个字节读入无符号字符(实际上将数据读取为字符并将其转换为每个字符的无符号字符)。现在我必须将未签名的字符写回二进制文件。

问题是现在我被迫在将它们转换为字符后写入单个字节(因为二进制文件的write()需要char * buffer)。所以,现在我必须做以下事情:

for(int x=0; x<data_size; x++)
{
    ch=(char)data[x];
    outfile.write(&ch,1);
}

有没有什么方法可以解决这个问题,以便在读写时减少I / O操作量?

3 个答案:

答案 0 :(得分:19)

你可以在指针上进行投射......

outfile.write((char *)&data[0], data_size);

可以进行相同的读取操作(即只需将指针传递给unsigned char数组的第一个元素,将其转换为指向char的指针)。

答案 1 :(得分:8)

outfile的类型是ofstream,对吧? ofstreamtypedef

typedef std::basic_ofstream<char, std::char_traits<char> > ofstream;

您需要自己的typedef

typedef std::basic_ofstream<unsigned char, std::char_traits<unsigned char> > uofstream;

然后,

uofstream outfile(...);
outfile.write(data, data_size); //no need to cast

答案 2 :(得分:2)

data类型为unsigned char*unsigned char[]并且您只想将这些位写入文件时,请执行指针转换:

for(int x=0; x<data_size; x++)
{
outfile.write((char*)data + x, 1);
}

由于强制转换会一次性删除一个问题:

outfile.write((char*)data, data_size);

你马上做到这一切。请注意,这超出了类型检查的范围,因此不是最佳解决方案。