• uint8_t / uint16_t / uint32_t /uint64_t 是什么数据类型?


    转自http://blog.csdn.net/zklth/article/details/7978362

    uint8_t / uint16_t / uint32_t /uint64_t 是什么数据类型?这些数据类型是 C99 中定义的,具体定义在:/usr/include/stdint.h ISO C99: 7.18 Integer types <stdint.h>

    /* There is some amount of overlap with <sys/types.h> as known by inet code */  
    #ifndef __int8_t_defined  
    # define __int8_t_defined  
    typedef signed char             int8_t;   
    typedef short int               int16_t;  
    typedef int                     int32_t;  
    # if __WORDSIZE == 64  
    typedef long int                int64_t;  
    # else  
    __extension__  
    typedef long long int           int64_t;  
    # endif  
    #endif  
      
    /* Unsigned.  */  
    typedef unsigned char           uint8_t;  
    typedef unsigned short int      uint16_t;  
    #ifndef __uint32_t_defined  
    typedef unsigned int            uint32_t;  
    # define __uint32_t_defined  
    #endif  
    #if __WORDSIZE == 64  
    typedef unsigned long int       uint64_t;  
    #else  
    __extension__  
    typedef unsigned long long int  uint64_t;  
    #endif  
    

    格式化输出:
    unit64_t %llu
    unit32_t %u
    unit16_t %hu

    注意:
    必须小心 uint8_t 类型变量的输出,例如如下代码,会输出什么呢?

    uint8_t fieldID = 67;
    cerr<< "field=" << fieldID <<endl;
    结果发现是:field=C 而 不是我们所想的 field=67

    这是由于 typedef unsigned char uint8_t;
    uint8_t 实际是一个 char, cerr << 会输出 ASCII 码是 67 的字符,而不是 67 这个数字.

    因此,输出 uint8_t 类型的变量实际输出的是其对应的字符, 而不是真实数字.

    若要输出 67,则可以这样:

    cerr<< "field=" << (uint16_t) fieldID <<endl;

    结果是:field=67

    同样: uint8_t 类型变量转化为字符串以及字符串转化为 uint8_t 类型变量都要注意, uint8_t类型变量转化为字符串时得到的会是ASCII码对应的字符, 字符串转化为 uint8_t 变量时, 会将字符串的第一个字符赋值给变量.

    例如如下代码:

    #include <iostream>  
    #include <stdint.h>  
    #include <sstream>  
    using namespace std;  
      
      
    int main()  
    {  
        uint8_t fieldID = 67;  
      
        // uint8_t --> string  
        string s;  
        ostringstream strOStream;  
        strOStream << fieldID;  
        s = strOStream.str();  
        cerr << s << endl;  
          
        // string --> uint8_t  
        s = "65";   
        stringstream strStream;  
        strStream << s;  
        strStream >> fieldID;  
        strStream.clear();  
        cerr << fieldID << endl;  
    }
    

    上述代码输出的是:
    C
    6

  • 相关阅读:
    微信小程序 解决disableScroll无法禁止小程序下拉的问题和视频铺满全屏尺寸
    微信小程序无法获取手机号 error:改appid没有权限
    js localeCompare() 根据汉字首字母进行排序
    vue 引入本地JS中的json 数据解析
    vue 打包优化 外部资源 elementUI axios等引入
    vue中 高德地图获取定位
    vue 与qrcodejs2 生成的二维码 logo 居中
    Mac vue-cli2.x版本升级3.x方法
    微信小程序 cover-view在 Video(原生组件)中遇到的问题
    Mac安装Vue-cli时 提示bash: vue: command not found问题
  • 原文地址:https://www.cnblogs.com/WArobot/p/6691545.html
Copyright © 2020-2023  润新知