[英]char* and unsigned char* casting
我需要在程序中读写二进制数据。 在做了一些研究之后,似乎无符号的char数组可能是存储数据的不错选择。
我使用ios :: binary标志以二进制模式打开文件,但是当我去读或写时,ifstream :: read()和ofstream :: write()函数需要char *和const char *。
因此,每次我想要读或写时,我都必须将我的unsigned 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数组可能是存储数据的不错选择。
IMO,您可以直接存储您所需的结构。 请确保它不依赖于平台:例如,使用int32_t
而不是int
( C++11
)
struct A{
...
};
A a;
file.write(&a, sizeof(a));
对于char和unsigned char之间的区别,它实际上取决于你。 但你必须连贯一致:
unsigned char[]...
file.write((unsigned char*)b, 20);
要么
char[]...
file.write((char*)b, 20);
带符号的char通常被认为是保存文本数据,而unsigned char表示一个字节,不一定是ASCII值。 然后,惯例是对二进制数据使用unsigned char,因为char是否已签名是依赖于实现的。
您为数据选择的数据类型应该影响您使用的功能,而不是相反。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.