unsigned char 和uint8_t的区别

今天发现有些代码当中使用uint8_t代替unsigned char来对数据进行声明。

大致进行搜索了一下,基本内容如下

  1. char的字节长度不是固定的,虽然大部分系统的实现都是8个字节,但可能会有例外

    char的大小是:exactly one byte in size, at least 8bits。

    uint8_t才是真正的8bit

  2. 因为在大部分系统中,两者的效果基本上一致。 如果没有实现uint8_t的系统中,可以由typedef重新定义。

     typedef unsigned char uint8_t;
     typedef unsigned short int uint16_t;
    
  3. C99标准规定,在stdint.h中定义的uint8_t是绝对的8bit;在对内存要求严格的环境中,这点非常重要。

     unsigned short   uint8_t 
     signed char      int8_t 
     unsigned short   uint16_t
     short            int16_t 
     unsigned int     uint32_t
     int              int32_t
    
  4. 此外,uint8_t能够更清楚地表明,我们定义的是一个取值范围更短的数字,而非什么char。

    It documents your intent - you will be storing small numbers, rather than a character.

综上所述,在能采用C99标准的环境里,uint8_t系列的选择显然更好。

参考资料