我正在编写一个读取二进制文件的程序。因此,我将单个字节读入无符号字符(实际上将数据读取为字符并将其转换为每个字符的无符号字符)。现在我必须将未签名的字符写回二进制文件。
问题是现在我被迫在将它们转换为字符后写入单个字节(因为二进制文件的write()需要char * buffer)。所以,现在我必须做以下事情:
for(int x=0; x<data_size; x++)
{
ch=(char)data[x];
outfile.write(&ch,1);
}
有没有什么方法可以解决这个问题,以便在读写时减少I / O操作量?
答案 0 :(得分:19)
你可以在指针上进行投射......
outfile.write((char *)&data[0], data_size);
可以进行相同的读取操作(即只需将指针传递给unsigned char数组的第一个元素,将其转换为指向char的指针)。
答案 1 :(得分:8)
outfile
的类型是ofstream
,对吧? ofstream
是typedef
,
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);
你马上做到这一切。请注意,这超出了类型检查的范围,因此不是最佳解决方案。