我需要在我的程序中读写二进制数据。经过一些研究,似乎使用无符号字符数组来存储数据是一个不错的选择。
我使用ios::binary标志以二进制模式打开文件,但是当我要进行读取或写入操作时,ifstream::read()和ofstream::write()函数期望接收一个char*和const char*类型的参数。
因此,每次我想要进行读写操作时,都必须将无符号字符指针转换为char*。
我认为这不会有任何区别,但我开始怀疑是否应该只使用常规的char数组来存储数据。我看到有人用char数组和无符号char数组来完成此任务,但我并不完全了解它们之间的区别。
假设我有两个数组:
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]
。 - GManNickG