精华内容
下载资源
问答
  • 2020-12-22 05:28:50

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

    在nesc的代码中,你会看到非常多你不认识的数据类型,比方uint8_t等。咋一看。好像是个新的数据类型,只是C语言(nesc是C的扩展)里面好像没有这种数据类型啊!怎么又是u又是_t的?非常多人有这种疑问。论坛上就有人问:以*_t结尾的类型是不是都是long型的?在baidu上查一下,才找到答案,这时才发觉原来自己对C掌握的太少。

    那么_t的意思究竟表示什么?详细的官方答案没有找到,只是我认为有个答案比較接近。它就是一个结构的标注。能够理解为type/typedef的缩写,表示它是通过typedef定义的,而不是其他数据类型。

    uint8_t,uint16_t。uint32_t等都不是什么新的数据类型。它们仅仅是使用typedef给类型起的别名。新瓶装老酒的把戏。

    只是,不要小看了typedef,它对于你代码的维护会有非常好的作用。

    比方C中没有bool,于是在一个软件中。一些程序猿使用int,一些程序猿使用short,会比較混乱。最好就是用一个typedef来定义,如:

    typedef char bool;

    一般来说,一个C的project中一定要做一些这方面的工作,由于你会涉及到跨平台。不同的平台会有不同的字长。所以利用预编译和typedef能够让你最有效的维护你的代码。为了用户的方便。C99标准的C语言硬件为我们定义了这些类型,我们放心使用就能够了。

    依照posix标准,一般整形相应的*_t类型为:

    1字节     uint8_t

    2字节     uint16_t

    4字节     uint32_t

    8字节     uint64_t

    附:C99标准中inttypes.h的内容

    00001 /*

    00002    inttypes.h

    00003

    00004    Contributors:

    00005      Createdby Marek Michalkiewicz

    00006

    00007    THISSOFTWARE IS NOT COPYRIGHTED

    00008

    00009    Thissource code is offered for use in the public domain.  You may

    00010    use,modify or distribute it freely.

    00011

    00012    Thiscode is distributed in the hope that it will be useful, but

    00013    WITHOUTANY WARRANTY.  ALLWARRANTIES, EXPRESS OR IMPLIED ARE HEREBY

    00014    DISCLAIMED.  This includes but is not limited towarranties of

    00015    MERCHANTABILITYor FITNESS FOR A PARTICULAR PURPOSE.

    00016  */

    00017

    00018 #ifndef __INTTYPES_H_

    00019 #define __INTTYPES_H_

    00020

    00021 /* Use [u]intN_t if you need exactly N bits.

    00022    XXX- doesn't handle the -mint8 option.  */

    00023

    00024 typedefsigned char int8_t;

    00025 typedefunsigned char uint8_t;

    00026

    00027 typedefint int16_t;

    00028 typedefunsigned int uint16_t;

    00029

    00030 typedeflong int32_t;

    00031 typedefunsigned long uint32_t;

    00032

    00033 typedeflong long int64_t;

    00034 typedefunsigned long long uint64_t;

    00035

    00036 typedefint16_t intptr_t;

    00037 typedefuint16_t uintptr_t;

    00038

    00039 #endif

    更多相关内容
  • uint8_t / uint16_t / uint32_t /uint64_t 都是别名,c语言中有哪些数据类型?怎么样取别名 在C语言中有6种基本数据类型:short、int、long、float、double、char 1、数值类型 1)整型:short、int、long 2)浮点型...

    uint8_t / uint16_t / uint32_t /uint64_t 都是别名,c语言中有哪些数据类型?怎么样取别名

    在C语言中有6种基本数据类型:short、int、long、float、double、char

    1、数值类型
    1)整型:short、int、long
    2)浮点型:float、double
    2、字符类型:char

    二、使用 typedef
    在这里插入图片描述
    猛然一看有点看不懂,可能因为美观原因,源码把它分开写了,实际红色框的是一个整体,是对这个整体取别名,同一个数据类型可以有多个别名,就像在导师叫我小王,同学叫我棒哥一样,,,
    在这里插入图片描述
    如下注释:

       /* 7.18.1.1 */
    
        /* exact-width signed integer types */
    typedef   signed           char int8_t;//给有符号char,取别名为int8_t
    typedef   signed short     int int16_t;//给有符号短整型short int,取别名int16_t
    typedef   signed           int int32_t;//给有符号整型short int,取别名int32_t
    typedef   signed       __INT64 int64_t;
    
        /* exact-width unsigned integer types */
    typedef unsigned          char uint8_t;//给无符号char,取别名为uint8_t
    typedef unsigned short     int uint16_t;//给无符号短整型short int,取别名为uint16_t
    typedef unsigned           int uint32_t;//给无符号整型short int,取别名为uint32_t
    typedef unsigned       __INT64 uint64_t;
    
        /* 7.18.1.2 */
    //和上面一样,取其他别名
        /* smallest type of at least n bits */
        /* minimum-width signed integer types */
    typedef   signed          char int_least8_t;
    typedef   signed short     int int_least16_t;
    typedef   signed           int int_least32_t;
    typedef   signed       __INT64 int_least64_t;
    
        /* minimum-width unsigned integer types */
    typedef unsigned          char uint_least8_t;
    typedef unsigned short     int uint_least16_t;
    typedef unsigned           int uint_least32_t;
    typedef unsigned       __INT64 uint_least64_t;
    
        /* 7.18.1.3 */
    
        /* fastest minimum-width signed integer types */
    typedef   signed           int int_fast8_t;
    typedef   signed           int int_fast16_t;
    typedef   signed           int int_fast32_t;
    typedef   signed       __INT64 int_fast64_t;
    
        /* fastest minimum-width unsigned integer types */
    typedef unsigned           int uint_fast8_t;
    typedef unsigned           int uint_fast16_t;
    typedef unsigned           int uint_fast32_t;
    typedef unsigned       __INT64 uint_fast64_t;
    

    为什么喜欢叫它 int8_t, uint8_t;int16_t, uint16_t;int32_t, uint32_t?
    1,数据类型中都带有_t, _t 表示这些数据类型是通过typedef定义的,而不是新的数据类型。也就是说,它们其实是我们已知的类型的别名。
    2,8,16,32又是什么意思?
    这些数字都是位数,即,使用多少位来存储数据,一个字节8位,其中因为数字有正负之粉,对应有符号(signed,最高位为0,表示正数)和无符号(unsigned,最高位为1,表示负数),所以表示的范围不一样,但是因为位数一致,故表示的个数是一样的。
    比如使用16位,也就是两个字节来存储
    可以是 typedef signed short int int16_t;//给有符号短整型short int,取别名int16_t
    也可以是 typedef unsigned short int uint16_t;//给无符号短整型short int,取别名为uint16_t
    int16_t 表示数据范围则是0 ~65535。
    uint16_t 表示数据范围为-32768~32767
    表示的个数是一样的:65536=2的16次方

    参考这个博主的一段话:
    整型的每一种都有无符号(unsigned)和有符号(signed)两种类型(float和double总是带符号的),在默认情况下声明的整型变量都是有符号的类型(char有点特别),如果需声明无符号类型的话就需要在类型前加上unsigned。无符号版本和有符号版本的区别就是无符号类型能保存2倍于有符号类型的正整数数据,比如16位系统中一个int能存储的数据的范围为-32768~32767,而unsigned能存储的数据范围则是0 ~65535。由于在计算机中,整数是以补码形式存放的。根据最高位的不同,如果是1,有符号数的话就是负数;如果是无符号数,则都解释为正数。同时在相同位数的情况下,所能表达的整数范围变大。

    挖一下这句话
    在默认情况下声明的整型变量都是有符号的类型(char有点特别),有什么特别呢

    如何确认char到底是signed char还是unsigned char

    ANSI C 提供了3种字符类型,分别是char、signed char、unsigned char 、char相当于signed char或者unsigned char,但是这取决于编译器
    这三种字符类型都是按照1个字节存储的,可以保存256个不同的值。
    signed char取值范围是 -128 到 127
    unsigned char 取值范围是 0 到 255

    有符号和无符号有默认的,可以省略不写,默认情况下声明的整型变量都是有符号的类型

    typedef char    int8_t; 
    

    如果编译器认为是signed char= char,上面那句就相当于

    typedef signed char    int8_t;   
    

    如果编译器认为是usigned char= char,上面那句就相当于

    typedef usigned char    int8_t;   
    

    再看:

    typedef unsigned short   int uint16_t;
    typedef unsigned   int uint32_t;
    

    参考:C语言中的整数(short,int,long)
    short、int、long 是C语言中常见的整数类型,其中 int 称为整型,short 称为短整型,long 称为长整型。

    int
    short int:int可以省略
    long int:int可以省略

    描述 short、int、long 类型的长度时,只对 short 使用肯定的说法,而对 int、long 使用了“一般”或者“可能”等不确定的说法。这种描述的言外之意是,只有 short 的长度是确定的,是两个字节,而 int 和 long 的长度无法确定,在不同的环境下有不同的表现。
    2 ≤ short ≤ int ≤ long

    这就意味着,short 并不一定真的”短“,long 也并不一定真的”长“,它们有可能和 int 占用相同的字节数。
    一般short 2字节,int 4字节,liong 8字节。

    这样取别名为uint8_t / uint16_t / uint32_t /uint64_t 的好处是?
    1,从名字一眼就可以看出,使用多少位来存数据,统一了“标准”
    2,为了程序的可扩展性, 假如我们此刻将来我们需要的数据大小变成了64bit时,我们只需要将typedef long long size_t就可以了, 不然我们可要修改好多好多的地方了,当自己设计一个int类型保存某种数据时,但你又没把握将来是不是要用long int时你可以引用一个自己定义的数据类型

    假如本程序此时需要一个数据大小为32位的用来存储正数的类型 size_t
    在原来已经定义的如下别名的基础上:

    typedef unsigned  int uint32_t;
    typedef unsigned  long int uint64_t;
    

    可以再次取别名:

    typedef  uint32_t  size_t ;
    

    如果以后要改成64位的,就改为:

    typedef  uint64_t  size_t ;
    

    size_t在代码中出现的,含义全部更改,可扩展性好。

    __int64这种类型是什么?
    参考:long int与long long的区别
    在这里插入图片描述
    测试代码:

    typedef unsigned int       uint32_t;
    typedef unsigned long       uLint32_t;
    typedef unsigned  long long  uint64_t;
    //typedef unsigned  long long int  uint64_t;
    typedef unsigned short    int uint16_t;
    
    int main()
    {
    	uint32_t a;
    	a = 12;
    	printf("unsigned int对应sizeof(a) = %d\n", sizeof(a));
    
    	uLint32_t a1;
    	a1= 12;
    	printf("nsigned long对应 sizeof(a1) = %d\n", sizeof(a1));
    
    	uint64_t b;
    	b = 12;
    	printf("unsigned  long long对应  sizeof(b) = %d\n", sizeof(b));
    
    	uint16_t c;
    	c = 12;
    	printf("unsigned short 对应   int sizeof(c) = %d\n", sizeof(c));
    
    	int d;
    	d= 12;
    	printf("int 对应sizeof(d) = %d\n", sizeof(d));
    
    	long  e;
    	e = 12;
    	printf("long 对应 sizeof(e) = %d\n", sizeof(e));
    
    	long long  f;
    	f = 12;
    	printf("long long对应 sizeof(f) = %d\n", sizeof(f));
    }
    
    

    结果:
    在这里插入图片描述
    long int
      long int即long,给人的感觉好像是长整型,但实际上,它和int一样,只有32位
    int - basic integer type. The keyword int may be omitted if any of the modifiers listed below are used. If no length modifiers are present, it’s guaranteed to have a width of at least 16 bits. However, on 32/64 bit systems it is almost exclusively guaranteed to have width of at least 32 bits.
    long - target type will have width of at least 32 bits.

    long long则不同,long long是C++的64位整型的基本类型,“现任”长整型,从C99开始引入这个概念,在后续的标准中完善概念和定义,C++11官方正式标准如下——
    long long - target type will have width of at least 64 bits.(since C++11)

    展开全文
  • uint8_t / uint16_t / uint32_t /uint64_t 是什么数据类型?在nesc的代码中,你会看到很多你不认识的数据类型,比如uint8_t等。咋一看,好像是个新的数据类型,不过C语言(nesc是C的扩展)里面好像没有这种数据类型啊!...

    uint8_t / uint16_t / uint32_t /uint64_t 是什么数据类型?在nesc的代码中,你会看到很多你不认识的数据类型,比如uint8_t等。咋一看,好像是个新的数据类型,不过C语言(nesc是C的扩展)里面好像没有这种数据类型啊!怎么又是u又是_t的?很多人有这样的疑问。论坛上就有人问:以*_t结尾的类型是不是都是long型的?在baidu上查一下,才找到答案,这时才发觉原来自己对C掌握的太少。

    那么_t的意思到底表示什么?具体的官方答案没有找到,不过我觉得有个答案比较接近。它就是一个结构的标注,可以理解为type/typedef的缩写,表示它是通过typedef定义的,而不是其它数据类型。

    uint8_t,uint16_t,uint32_t等都不是什么新的数据类型,它们只是使用typedef给类型起的别名,新瓶装老酒的把戏。不过,不要小看了typedef,它对于你代码的维护会有很好的作用。比如C中没有bool,于是在一个软件中,一些程序员使用int,一些程序员使用short,会比较混乱,最好就是用一个typedef来定义,如:

    typedefchar bool;

    一般来说,一个C的工程中一定要做一些这方面的工作,因为你会涉及到跨平台,不同的平台会有不同的字长,所以利用预编译和typedef可以让你最有效的维护你的代码。为了用户的方便,C99标准的C语言硬件为我们定义了这些类型,我们放心使用就可以了。 按照posix标准,一般整形对应的*_t类型为:

    1字节 uint8_t

    2字节 uint16_t

    4字节 uint32_t

    8字节 uint64_t

    这些数据类型是 C99 中定义的,具体定义在:/usr/include/stdint.h ISO C99: 7.18 Integer types

    /*There is some amount of overlap with as known by inet code*/#ifndef __int8_t_defined

    # define __int8_t_defined

    typedef signedcharint8_t;

    typedefshort intint16_t;

    typedefintint32_t;

    #if __WORDSIZE == 64typedeflong intint64_t;

    #else__extension__

    typedeflong long intint64_t;

    # endif#endif

    /*Unsigned.*/typedef unsignedcharuint8_t;

    typedef unsignedshort intuint16_t;

    #ifndef __uint32_t_defined

    typedef unsignedintuint32_t;

    # define __uint32_t_defined#endif

    #if __WORDSIZE == 64 typedef unsignedlong intuint64_t;#else __extension__

    typedef unsignedlong long intuint64_t;#endif 注意:

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

    uint8_t fieldID= 67;

    cerr<< "field=" << fieldID <

    结果发现是:field=C 而 不是我们所想的 field=67这是由于:

    typedef unsignedcharuint8_t;

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

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

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

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

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

    例如如下代码:

    #include#include#include

    using namespacestd;intmain()

    {

    uint8_t fieldID= 67;//uint8_t --> string

    strings;

    ostringstream strOStream;

    strOStream<

    s=strOStream.str();

    cerr<< s < uint8_t

    s = "65";

    stringstream strStream;

    strStream<

    strStream>>fieldID;

    strStream.clear();

    cerr<< fieldID <

    }

    上述代码输出的是:

    C6

    展开全文
  • uint8_tuint16_tuint32_tuint64_t

    千次阅读 2022-05-13 20:39:25
    uint8_tuint16_tuint32_tuint64_t

    uint8_t、uint16_t、uint32_t、uint64_t

    一、C语言数据类型介绍

    ​ 在C语言当中,数据类型主要分为四大种:基本类型、构造类型、指针类型和空类型void。

    其中基本类型包含两大类:整型和浮点型;

    构造类型类型包含数组、结构体 struct、共用体 union、枚举enum。

    char	//1个字节
    
    int		//4个字节
    
    float	//4个字节
    
    double	//8个字节
    

    二、uint8_t、uint16_t、uint32_t、uint64_t

    uint8_t、uint16_t、uint32_t、uint64_t等都并非新的数据类型,他们都是用typedef定义的,也就是起别名,他们包含于<stdint.h>中。

    在头文件中的定义如下:

    typedef unsigned   char 		uint8_t;
    typedef unsigned short  int 	uint16_t;
    typedef unsigned     int 		uint32_t;
    typedef unsigned    __INT64 	uint64_t;
    
    uint8_t		//1个字节
    
    uint16_t	//2个字节
    
    uint32_t	//4个字节
    
    uint64_t	//8个字节
    

    输出格式:

    uint8_t			//%d //(整型变量时)
    uint16_t		//%d or %hu		
    uint32_t		//%u
    uint64_t		//%llu
    

    注:uint8_t实际上是一个char。所以输出uint8_t类型的变量实际上输出其对应的字符,而不是数值。

    三、uint16_t转为uint8_t

    ​ 在单片机当中,各种传感器的数据多数是32位或者16位的,在STM32的HAL库开发当中,其发送函数是8位的,此时不能不能直接发送不同类型的数据,会发生精度丢失,此时则需要进行转换。

    uint8_t array[2];
    array[0]=(address&0xFF00)>>8;     //取地址的高8位
    array[1]=address&0x00FF;          //取地址的低8位
    

    学习路上小笔记,觉得对你有用的小伙伴请点个赞!

    展开全文
  • 转自:http://blog.csdn.net/kiddy19850221/article/details/6655066uint8_t / uint16_t / uint32_t /uint64_t 是什么数据类型在nesc的代码中,你会看到很多你不认识的数据类型,比如uint8_t等。咋一看,好像是个新...
  • uint8_tuint16_tuint64_t相互转换

    千次阅读 2020-09-03 16:20:48
    1. 声明 uint8_t, uint16_t 互转测试数据 uint8_t src_data[10] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}; uint16_t dec_data[5]; uint8_t nsrc_data[10]; 1.1uint8_tuint16_t //uint8_tuint16_t for (int i...
  • t uc16 typedef const uint8_t uc8 typedef __IO uint32_t vu32 typedef __IO uint16_t vu16 typedef __IO uint8_t vu8 typedef __I uint32_t vuc32 typedef __I uint16_t vuc16 typedef __I uint8_t vuc8
  • 我们在该文中已经分析了关于字符指针强制类型转换为uint16_t/uint8_t型指针,不会越限的现象,这里我们做一下具体分析: char ch[4]={0xAA,0x11}; printf("%d %d\n",*ch,*(ch+1)); printf("%x %x\n",*ch,*(ch+1...
  • 文章目录目录uint8_t\uint_16_t\uint32_t\uint64_t格式化输出 uint8_t\uint_16_t\uint32_t\uint64_t 在 C99 标准(ISO C99: 7.18 Integer types)的 stdint.h 头文件中通过 typedef 定义了这些数据类型: #ifndef __...
  • 对于uint16_tuint8_t之间的相互转化,以及uint16_t的高低位互换。 ** 一.说明: 左移:从二进制的角度看现象,就是左移几位就在右边添几个0。 从逻辑上来讲左移n位就是乘以2的n次方了。 右移:从二进制...
  • char、unsigned char、uint8_tuint16_t

    千次阅读 2020-03-10 11:05:07
    文章目录char、unsigned char、uint8_tuint16_t概述转NSStringuint8_tuint16_t取值范围初探charint取值范围的计算方法sizeof()一些系统的宏推荐阅读 char、unsigned char、uint8_tuint16_t 概述 基础 在C/...
  • uint8_t / uint16_t / uint32_t /uint64_t详解

    千次阅读 2019-08-19 13:43:14
    在C语言中有6种基本数据类型:short、int、long、float、double、char ...因此,uint8_t / uint16_t / uint32_t /uint64_t这些数据类型都只是别名。这些数据类型中都带有_t, _t 表示这些数据类型是通过type...
  • 1、添加头文件#include “stdint.h”。 2、在c_cpp_properties.json文件中添加__CC_ARM即可。如下图:
  • 一、C++基础数据类型 (一)如下图 C++的主要数据类型,主要分为三类:...byte为字节,bit为位,1byte=8bit 这两者应用的场合不同。通常用bit来作数据传输的单位,因为物理层,数据链路层的传输对于用户是透明...
  • C++的基础数据类型: C++的主要数据类型,主要分为三类:布尔型,整型(char型从本质上说,...即我们所看到的 uint8_tuint16_tuint32_t都不是新的数据类型,而是通过typedef给类型起得别名。 uint8_t / uint...
  • 浅析uint8_t / uint16_t / uint32_t /uint64_t

    万次阅读 多人点赞 2018-09-13 18:03:47
    简单来说,uint8_t / uint16_t / uint32_t /uint64_t这些数据类型都只是别名而来,具体如下: 一、C语言数据基本类型 在C语言中有6种基本数据类型:short、int、long、float、double、char 1)整型:short int、...
  • 三、uint8_t\uint_16_t\uint32_t\uint64_t 1、这些类型的来源:这些数据类型中都带有_t, _t 表示这些数据类型是通过typedef定义的,而不是新的数据类型。也就是说,它们其实是我们已知的类型的别名。 2、使用...
  • C语言中的数据类型理解前言 前言 根据开发需要决,用 char 时,数组每个元素的 字长与存储单元 是1个byte(16进制2位,2进制8位)。而用int时,数组每个元素的 字长与存储单元 ...C语言中int8_t、int16_t、int32_t、i
  • #define BUF_LEN (10*1024*1024) #define HIT_LEN 16 void decode(char *datafile, char* rootfile) { ...uint8_t *buffer = new uint8_t[BUF_LEN]; 这几段代码怎么注释呢,求大神解答
  • 简单说,就是使用typedef给类型起的别名,一个C/C++的工程中最好使用typedef,如果工程涉及到跨平台,不同的平台会有不同的字长,利用预编译...1字节 uint8_t 2字节 uint16_t 4字节 uint32_t 8字节 uint64_t ...
  • uint8_tuint16_tuint32_t只是使用typedef给类型起的别名。 为了用户的方便,C99标准的C语言硬件为我们定义了这些类型,按照posix标准,一般整形对应的*_t类型为: 1字节 uint8_t typedef unsigned char uint...
  • Java实现uint8_t/uint16_t/uint32_t

    千次阅读 2019-12-03 16:01:16
    在Java中,整数可以用byte,short,int和long等类型来表示,并不支持unsigned类型。然而在很多情况下Java也需要处理无符号类型,如翻译C/C++代码,与C/C++进行通讯等,这时就需要用Java来实现uint8_t,uint16_t,uin...
  • c语言 uint8_tuint32_t相互转换

    千次阅读 2021-04-14 10:02:33
    一、uint8_tuint32_t uint8_t var1 = 0x12; uint8_t var2 = 0x34; uint8_t var3 = 0x56; uint8_t var3 = 0x78; uint32_t bigvar = (var3 << 24) + (var3 << 16) + (var2 << 8) + var1;// ...
  • c – int8_tuint8_t是char类型吗?

    千次阅读 2021-05-22 14:01:37
    #include #include int main(){int8_t i = 65;std::cout << i;}标准是否指定此类型是否可以是字符类型?解决方法:根据C 0x FDIS(N3290)的§18.4.1[cstdint.syn],int8_t是一个可选的typedef,其指定如下:...
  • STM32类型定义: /* Exported types */ typedef signed long s32; typedef signed short s16; typedef signed char s8; typedef signed long const sc32;...typedef signed char const sc8; /* Read Only */ typed

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 336,543
精华内容 134,617
关键字:

uint8_t

友情链接: include.zip