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

Writing unsigned chars to a binary file using write()

本文关键字:字符 二进制文件 无符号 write 使用      更新时间:2023-10-16

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

问题是现在我被迫在将它们转换为字符后写入单个字节(因为二进制文件的write()期望char*缓冲区)。所以,现在我必须做以下操作:

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

是否有办法解决这个问题,以便在读写的情况下减少I/O操作的数量?

可以对指针进行类型转换…

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

同样可以用于读取(即只传递指向unsigned char数组的第一个元素的指针,将其转换为指向char的指针)。

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

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

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

As强制转换消除了一次一个的问题:

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

你一次就做完了。请注意,这优于类型检查,因此不是最佳解决方案。