精华内容
下载资源
问答
  • C语言uint8_t的解释

    2020-09-19 18:54:02
    一、C语言基本数据类型回顾 在C语言中有6种基本数据类型:short、int、long、float、double、char 1、数值类型 1)整型:short、int、long...三、uint8_t\uint_16_t\uint32_t\uint64_t 1、这些类型的来源:这些数据类型

    一、C语言基本数据类型回顾

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

    1、数值类型

    1)整型:short、int、long

    2)浮点型:float、double

    2、字符类型:char

    二、typedef回顾

    typedef用来定义关键字或标识符的别名,例如:

    typedef double wages;
    typedef wages salary;
    三、uint8_t\uint_16_t\uint32_t\uint64_t
    1、这些类型的来源:这些数据类型中都带有_t, _t 表示这些数据类型是通过typedef定义的,而不是新的数据类型。也就是说,它们其实是我们已知的类型的别名。

    2、使用这些类型的原因:方便代码的维护。比如,在C中没有bool型,于是在一个软件中,一个程序员使用int,一个程序员使用short,会比较混乱。最好用一个typedef来定义一个统一的bool:

    typedef char bool;
    在涉及到跨平台时,不同的平台会有不同的字长,所以利用预编译和typedef可以方便的维护代码。

    3、这些类型的定义:

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

    #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

    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
    4、格式化输出:

    uint16_t %hu
    uint32_t %u
    uint64_t %llu
    5、uint8_t类型的输出:
    注意uint8_t的定义为

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

    uint8_t num = 67;
    cout << num << endl;
    输出结果:C

    参考:http://www.360doc.com/content/18/1208/12/32862269_800182367.shtml

    展开全文
  • 一、uint8_t转uint32_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;// ...

    一、uint8_t转uint32_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;// bigvar=0x78563412
    

    二、uint32_t转uint8_t

    uint8_t p[4];
    uint32_t v = 0x12345678;
    			
    //小端系统
    p[0] = v  ; //0x78
    p[1] = v >> 8;//0x56
    p[2] = v >> 16;//0x34
    p[3] = v >> 24;//0x12
                
    //大端系统反过来即可
    
    展开全文
  • 一、C语言基本数据类型回顾 在C语言中有6种基本数据类型:short、int、long、float、double、cha...

    一、C语言基本数据类型回顾

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

    1、数值类型

    1)整型:short、int、long

    2)浮点型:float、double

    2、字符类型:char

    二、typedef回顾

    typedef用来定义关键字或标识符的别名,例如:

    typedef double wages;
    typedef wages salary;

    三、uint8_t\uint_16_t\uint32_t\uint64_t

    1、这些类型的来源:这些数据类型中都带有_t, _t 表示这些数据类型是通过typedef定义的,而不是新的数据类型。也就是说,它们其实是我们已知的类型的别名。

    2、使用这些类型的原因:方便代码的维护。比如,在C中没有bool型,于是在一个软件中,一个程序员使用int,一个程序员使用short,会比较混乱。最好用一个typedef来定义一个统一的bool:

    typedef char bool;

    在涉及到跨平台时,不同的平台会有不同的字长,所以利用预编译和typedef可以方便的维护代码。

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

    #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  
     
     
    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  

    4、格式化输出:

    uint16_t %hu
    uint32_t %u
    uint64_t %llu

    5、uint8_t类型的输出:

    注意uint8_t的定义为

    typedef unsigned char           uint8_t;

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

    uint8_t num = 67;
    cout << num << endl;

    输出结果:C

    参考:

    http://blog.sina.com.cn/s/blog_9dcc0fb90101gdvo.html

    http://blog.csdn.net/mrlixirong/article/details/48416533

    http://blog.csdn.net/kiddy19850221/article/details/6655066

     
    ---------------------  
    作者:海阔天空sky1992  
    来源:CSDN  
    原文:https://blog.csdn.net/Mary19920410/article/details/71518130  
    版权声明:本文为博主原创文章,转载请附上博文链接!

    展开全文
  • 基于模型的设计让软件开发变...但是,我也经常听到有人抱怨:现在的工程师太过依赖Simulink,根本就不知道C语言是怎么回事了,这在我们软件开发中很不方便!果有此事?果有此事!不得不说,毕竟你做的是软件开发工作...

    基于模型的设计让软件开发变得简单了,大量没有计算机软件背景的工程师也可以进行软件开发了。

    这个现象在汽车行业尤其突出,像我,大学就是发动机专业,工作中也可以通过使用Simulink和代码生成工具开发嵌入式C代码。

    但是,我也经常听到有人抱怨:现在的工程师太过依赖Simulink,根本就不知道C语言是怎么回事了,这在我们软件开发中很不方便!

    果有此事?果有此事!

    不得不说,毕竟你做的是软件开发工作,即便是有了Simulink,我们可以不再写C代码了,基本的C语言的概念还是有必要的。

    写到这里,又想起另外一件事……

    若干年前,在德尔福中国研发中心B楼的二楼,那位把写代码当成写诗的同事跟我说:三楼来了一位博士,做软件开发,居然连.h文件是做什么用的都不知道!言语中流露出一种鄙夷。

    我听后一惊,确实,我们大学毕业,虽说大多都学过C语言,并且不少学生会参加C语言的等级考试,但考试中,相比于.h文件的作用,老师们更喜欢考查i++++i之间的区别。

    在后来的日子里,不管是在德尔福还是在迈斯沃克,面对那些自称有着丰富软件项目经验的应聘者,我都会问这样一个问题:来,说一下,C语言中.h文件是做什么用的?

    回答各式各样,通常都答不到点子上。

    今天既然要写基于模型设计的C语言基础,不妨就从.h文件的作用开始写起。


    1. .h文件的作用

    当前技术背景下,工程化的项目已经没有小到一个文件就可以搞定的了,但凡有点规模的项目,基本上都是模块化开发的。模块化开发的时候,对应每个模块,通常会写两个文件,一个.c,另一个.h,比如module1.c,module1.h。.c文件通常用于定义变量和实现函数,而.h文件,除了定义一些公用的宏和类型之外,还会有下面这样的代码:

          extern uint8 var1;

          extern uint8 var2;

          extern void myfunction(void);

    这里 var1、var2是全局变量,而myfunction()是全局函数。

    .h文件的主要作用是接口,不同模块之间的接口,比如,在module2模块中如果要用到module1里面定义的全局变量或者全局函数,只要在module2.h文件中加这样一样代码:#include “module1.h”。负责module1模块的工程师,如果想调用module2模块提供的全局函数,也只要看一下module2.h即可。

    所以我经常跟用户强调不要去读自动生成的代码,如果一定要读,也只要读.h文件即可。

    我们在.h文件中经常会看到这样一段代码:

          #ifndef _MODULE1_H_

          #define _MODULE1_H_

    然后在.h文件的最末尾有:

          #endif

    这样的代码在.c文件中没有,请问,这又是什么意思?

    2. 条件编译的作用

    如果一个项目有10个模块,module1为其中的一个模块,其他模块在用到module1中定义的全局变量或者全局函数的时候,通常会在自己模块的.h文件中加这样一行代码#include “module1.h”,如果10个模块中的9个模块都有这样一行代码,在预编译的时候,就会重复加载很多次module1.h文件。怎么解决这个问题,可以通过宏_MODULE1_H_来确认是否已经加载过module1.h里的代码,第一次加载的时候,发现没有定义过宏_MODULE1_H_,也就是#ifndef _MODULE1_H_为真,于是定义这个宏,并加载后面的代码,在第二次再遇到#include “module1.h”的时候,已经有_MODULE1_H_这个宏了,#ifndef _MODULE1_H_后面的内容就不再被考虑,直接到#endif。

    条件编译,顾名思义,也就是条件成立的时候给后面的内容做编译,条件不成立,则直接跳过。

    3. 从C到hex或者exe,都经历了什么?

    编译,通常我们会说把C编译成hex文件。其实,这种说法是不准确的,当然,你也可以认为这里的编译是广义上的编译,也就是我们经常在各种编译工具中的IDE界面下看到的Build,没错,Build更准确一些(Build是否应该翻译成“构建”?)。

    从C到hex的整个Build过程会经历编译和链接两个阶段。编译,就是把C代码转换成目标代码,通常扩展名为.obj或者.o。目标代码不是最终的二进制码,目标代码中没有代码和变量的地址信息,编译过程中不会提示你某个变量没有定义或者某个变量被多次定义,只要你合理的使用extern关键字。

    地址信息是在链接(Link)过程中加上去的,链接器会把编译好的目标代码根据链接文件,把代码和数据分配到合适的存储区域。

    4. extern关键字

    这个关键字是给编译器看的,编译器遇到这个关键字,就知道这个关键字修饰的那个全局变量或者全局函数不在本文件中定义,而是在其他文件中有定义,所以编译器在编译本文件的时候不会因为没有定义这个全局变量或者全局函数而提示“未定义”之类的错误,当然,如果到了链接阶段,链接器找遍了所有的目标文件,都找不到你所谓的extern变量的话,那个时候,链接器就会提示undefined reference 了。

    5. static变量和全局变量的区别

    C语言中static变量和全局变量一样,编译、链接之后会分配固定的RAM地址,不同的是,static变量的作用域仅限于文件级别,你没法让module1中定义的staitc变量被module2模块使用,自然,加了static关键字的变量,也不会在module1.h文件中做extern声明。

    另外,static除了可以修饰变量之外,还可以修饰函数。 

    6. #pragma的作用

    翻开C标准,你会发现,#pragma在标准里并没有明确的定义,而是预留给编译器扩展使用,通常,大多数编译器使用如下格式使用:

    #pragma mysection begin

    Uint8 var1;

    Uint16 var2;

    #pragma mysection end

    需要强调的是这种格式并非标准化的格式,不同的编译器之间可能有所不同,使用前需要查看编译器手册,使用正确的格式。

    上面的4行代码是什么作用呢?中间两行显然是定义了两个变量var1和var2,前后的两行#pragma是把这两个变量放到了mysection区域,而这个mysection的地址范围是在link文件中定义的。

    当然,也可以使用@将变量分配到某一地址下,不过这种做法在Simulink模型中实现起来非常麻烦,不建议使用。

    7. const和volatile关键字的作用

    const,常数,不变的,变量前面加这个关键字,我们会称这个变量为常数型变量。编译器在遇到前面加了限定词const的变量之后,如果后续代码中有对这个变量进行写操作的语句,编译器就会报错,因为这个变量是不变的。

    volatile,字面意思是易变的、易逝的,通常用来对付那些存储在某些端口的数据,或者某个RAM/ROM区间的变量,这个数据是容易变化的。

    而这两个关键字也经常一起使用,比如标定量,标定量显然在程序运行过程中不会变化,而标定量经常被标定工具修改,如果不加上volatile限定词,修改后的数值就可能不会被用到后续的计算中。

    8. typedef的作用

    曾经有人质问我为什么生成的代码里变量的数据类型不能直接使用C语言中的char、unsigned short、int等基本数据类型,而偏偏要弄一些uint8_T, uint16_T等等?

    好吧,我猜测更多友善的用户不去质问,但心里也许有同样的疙瘩,很多编码规范里都规定不准使用C语言的基础数据类型,做这条规定的主要考虑是代码的可移植性,比如,原有的算法运行在16位单片机上,现在性能要求提升,硬件平台升级到32位机,如果代码里全都是基础数据类型,代码的移植将非常麻烦,而如果使用了typedef定义之后的类型,只需要改变typedef即可。

    9. 宏定义#define

    关于#define,我们在代码中可能会看到这样一些使用方式

        #define MY_MACRO

        #define  K      30

        #define MAX(a,b)  (a>b)?a:b

    先说第一种,就是定义了MY_MACRO,MY_MACRO就是一个宏,这个宏就像一个标记,后续代码可以判断是否有这个宏,有的话怎么样,没有的话又怎么样,.h的文件最开始的那段,就是这种用法。

    第二种,就是把K定义为30,后续代码中凡是遇到K的地方,编译器编译的时候,就直接替换成30。

    第三种,相当于用宏的方式定义了一个函数,跟普通的函数定义不同,在宏定义函数的时候无需定义形参的数据类型,而普通函数的形参是需要定义数据类型的,为什么呢?有兴趣的可以仔细想想,我就不去展开了。

    10. 定点数

    定点数就是用整数来表达小数,计算机里并没有定点数这种东西,所以我们在定义数据类型的时候,Simulink模型中可能会使用fixdt,而到C代码中,只能看到uint16,uint32等等。定点数中的小数点,是我们假设的,我们会在整数的某个位置假设有一个小数点,那么小数点左边的是整数部分,小数点右边的是小数部分,当然这些计算机并不知道,它依然当成整数运算处理,所以对于编程者来说,需要在运算前后做一些移位对齐小数点的工作,如果你用Simulink模型开发软件,移位对齐工作就不需要你去折腾了,代码生成的时候会被考虑进去。

    想到哪写到哪,有些乱,没办法,我也想写的条理一些,但没做到。先写这些吧,如果网友觉得还有其他需要补充的,可以给我留言或者投稿。

    推荐阅读

    Automotive SPICE和Automotive SPICE评估的那些事

    自动代码生成那点事儿

    雕虫小技 | Simulink模型开发中的一些自动化方法

    结构体变量建模之终极解决方案(续)

    为什么一定要做SIL测试

    2a7938af4d5b956a2aec6e6b8013a175.png

    展开全文
  • 测试环境为32位STM32单片机硬件平台:STM32F103C8T6图片里面都没有C语言了使用内部晶振MCU FREQ: 64000000 HCLK FREQ: 64000000PCLK1 FREQ: 32000000PCLK2 FREQ: 64000000 ADC FREQ: 8000000 MCU Type: 00-1...
  • ZYNQ的SDK是用C语言进行开发的,C语言可以说是当今理工...关键字char :定义一个8位的变量,就是一个字节。shortint:定义一个16位的变量,就是两个直接int :定义一个32位(一般情况下)的变量,就是四个字节。floa...
  • uint32_t pin;}; 其中, __STM32_PIN中的内容为: index:代表引脚编号GPIO##gpio##_CLK_ENABLE:代表时钟使能GPIO##gpio:代表端口GPIO_PIN_##gpio_index:代表引脚号 从这里可以推出##符号起连接作用。假设这样...
  • uint32_t pin; }; 其中, __STM32_PIN中的内容为: index:代表引脚编号 GPIO##gpio##_CLK_ENABLE:代表时钟使能 GPIO##gpio:代表端口 GPIO_PIN_##gpio_index:代表引脚号 从这里可以推出##符号起连接作用。假设...
  • 目前在国内很多大学人学习计算机的第一门编程语言便是C语言。想当年高考结束自己也是不知道报什么好,就报考了个网络工程的专业,反正也不知道是什么,前景怎么样,农村出生的,父母也没人知道,身边上大学的基本上...
  • 链接:https://pan.baidu.com/s/1d2Bb1vNTyBNpFGneIAicVw提取码:y7uw单项选择题 ...A、函数 B、过程 C、子程序 D、子例程2.C语言程序从 C 开始执行。 A)程序中第一条可执行语句 B)程序中第一个函数C)程序中的...
  • 3 img_gray2 = img_gray2.astype(np.uint8) 效果如下: 可见效果并不好 第二种是取每个通道上的最大值: #第三种 max(R,G,B) img_gray3 = np.zeros((256,256)) for i in range(0,256): for j in range(0,256): img...
  • 来源:公众号【鱼鹰谈单片机】作者:鱼鹰OspreyID :emOsprey程序出现 BUG 是很正常的事情,那你是否有过在程序运行前就提前发现 BUG 的经历呢?前些天,鱼鹰在看同事的代码时,就...typedef struct { uint32_t in; ...
  • 前言有时我们使用PIL库读入图像数据后需要查看图像数据的维度,比如shape,或者有时我们需要对图像数据进行numpy类型的处理,所以涉及到相互转化,这里简单记录一下。方法当使用PIL.Image.open()打开图片后,如果要...
  • 浅析C语言uint8_t / uint16_t / uint32_t /uint64_t 。 https://blog.csdn.net/Mary19920410/article/details/71518130 一、C语言基本数据类型回顾 在C语言中有6种基本数据类型:short、int、long、float、...
  • uint8_t uint16_t uint32_t uint64_t 的数据类型 https://blog.csdn.net/liweigao01/article/details/84032933
  • C语言Uint8_t数据类型

    千次阅读 2014-12-17 23:17:53
    C语言中好像没有这种数据类型,但是在实际应用的过程中,发现许多人的代码中都存在这种表示方式。...typedef unsigned char uint8_t; //无符号8位数  typedef signed char int8_t; //有符号8位
  • C语言Uint8_t数据类型分析

    千次阅读 2015-03-31 20:01:45
    C语言中好像没有这种数据类型,但是在实际应用的过程中,发现许多人的代码中都存在这种表示方式。...typedefunsigned char uint8_t; //无符号8位数 typedef signed char int8_t;//有符号8位数 ...
  • 一、C语言基本数据类型回顾 在C语言中有6种基本数据类型:short、int、long、float、double、char 1、数值类型 1)整型:short、int、long 2)浮点型:float、double 2、字符类型:char 二、typedef回顾 ...
  • C语言 char转uint8_t

    2021-01-08 16:36:30
    char转uint8_t: static int char2uint(char *input, uint8_t *output) { for(int i = 0; i < 24; i++) { output[i] &= 0x00; for (int j = 1; j >= 0; j--) { char hb = input[i*2 + 1 - j]; if ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 675
精华内容 270
关键字:

c语言uint8

c语言 订阅