gpt4 book ai didi

c++ - 字节数组的 Char 与 unsigned char

转载 作者:可可西里 更新时间:2023-11-01 16:35:46 24 4
gpt4 key购买 nike

当存储“字节数组”(blobs...)时,对于项目(unsigned char 使用char 还是unsigned char 更好> 又名 uint8_t)? (标准规定两者的 sizeof 正好是 1 字节。)

这有关系吗?或者一个比另一个更方便或更普遍?也许,像 Boost 这样的库确实使用了什么?

最佳答案

如果 char 是有符号的,那么对设置了高位的字节值执行算术将导致在提升为 int 时进行符号扩展;所以,例如:

char c = '\xf0';
int res = (c << 24) | (c << 16) | (c << 8) | c;

将给出 0xfffffff0 而不是 0xf0f0f0f0。这可以通过使用 0xff 进行屏蔽来避免。

char 如果您要与使用它而不是 unsigned char 的库交互,可能仍然更可取。

请注意,从 char * 到/从 unsigned char * 的转换始终是安全的 (3.9p2)。支持 unsigned char 的一个哲学原因是标准中的 3.9p4 支持它,至少是为了表示可以保存对象的内存表示的字节数组:

The object representation of an object of type T is the sequence of N unsigned char objects taken up by the object of type T, where N equals sizeof(T).

关于c++ - 字节数组的 Char 与 unsigned char,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13819820/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com