Char与字节数组的unsigned char

Car*_*s00 9 c++ gcc c++11

当存储"字节数组"(blobs ...)时,使用char或更好地使用unsigned char项目(unsigned char又名uint8_t)?(标准说sizeof两者都是1字节.)

它有关系吗?或者一个比另一个更方便或更普遍?也许,像Boost这样的图书馆会用到什么?

eca*_*mur 11

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

char c = '\xf0';
int res = (c << 24) | (c << 16) | (c << 8) | c;
Run Code Online (Sandbox Code Playgroud)

0xfffffff0代替0xf0f0f0f0.这可以通过屏蔽来避免0xff.

char如果你与使用它而不是使用它的库连接,可能仍然是可取的unsigned char.

请注意,来自char */来自的演员unsigned char *总是安全的(3.9p2).支持的一个哲学原因unsigned char是标准中的3.9p4支持它,至少对于表示可以保存对象的内存表示的字节数组:

类型对象的对象表示是类型对象占用TN unsigned char对象序列T,其中Nequals sizeof(T).