繁体   English   中英

char *和unsigned char * cast

[英]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而不是intC++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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM