【发布时间】:2016-03-26 20:14:12
【问题描述】:
我需要在我的程序中读写二进制数据。在做了一些研究之后,似乎 unsigned char 数组可能是存储数据的好选择。
我使用 ios::binary 标志以二进制模式打开文件,但是当我去读取或写入时,ifstream::read() 和 ofstream::write() 函数需要一个 char* 和 const char *.
所以,每次我想读或写时,我都必须将我的 unsigned char* 转换为 char*。
我认为这不会产生任何影响,但我开始怀疑是否应该只使用常规 char 数组来存储数据。我看到人们为此目的同时使用 char 和 unsigned char 数组,但我并不完全理解其中的区别。
假设我有 2 个数组:
char a[20];
unsigned char b[20];
现在我以二进制模式打开一个文件并读取:
file.read(a, 20);
file.read((char*)b, 20);
现在我想将此数据写入一个新文件,因此我再次以二进制模式打开:
newfile.write(a, 20);
newfile.write((char*)b, 20);
有什么区别?对于二进制数据,我最好只使用 char 数组而不是 unsigned char 数组吗?
【问题讨论】:
-
文件/二进制读取接口使用
char*作为“指向字节的指针”的类型是正常的。在您的情况下,将字节读入unsigned char[]是非常安全的,而转换为char*也是非常安全的。您应该使用reinterpret_cast来表明您只是暂时将数组视为char*而不是unsigned char[20]。
标签: c++ linux g++ binary-data