嵌入式技术
嵌入式系统的串口数据传输都是以字节为单位,但是有些特殊的数据类型,比如浮点型float a=231.5,在内存是如何表示的呢?
我们知道浮点型float数据类型占用4个字节,实际上在内存当中a=0x43678000,
只是嵌入式芯片访问a时,知道a是浮点型数据,所以一次性读取4个字节,而且也按照浮点型的数据表示规定,将a转换为十进制的可读数据231.5
如果我们从串口接收到4个字节数据{0x43,0x67,0x80,0x00},如何把这4个字节的数据转换为float型呢?
直接令float a=0x43678000这是不行的(不信的读者可以自行验证),这就是串口通讯当中经常遇到的问题,
如果数据传输中包括了浮点型数据,在这里我们可以通过共用体或者结构体来解决。
对于共用体:
typedef union { float f; unsigned char s[4]; }Union_test;f 的4个字节和s[4]的4个字节是共用一个区域,如果我们令 f=231.5,然后通过VS的监视窗查看s[4]的数值,下面是测试程序:
#include监视结果如下所示://共用体 //float f;//4个字节 //char s[4];//4个字节 typedef union { float f; unsigned char s[4]; }Union_test; typedef struct st { float f1; }Struct_test; void main(void) { float a=231.5; Union_test x; Struct_test z; x.f = a; z = *(Struct_test *)(&(x.s)); printf("z=%.2f ",(double)z.f1); printf("End of this programme "); }
我们可以通过下面的函数测试是大端存储还是小端存储:
void test(void) { int a = 1; unsigned char *start=&a; if(*start == 1) printf("小端存储"); else if(*start == 0) printf("大端存储"); }审核编辑:汤梓红
全部0条评论
快来发表一下你的评论吧 !