本文主要是介绍Linux float int和16进制互相转换,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
Linux 上float int和16进制互换操作。之前把float转16进制,也就是转成4个字节,方便使用串口传输嘛。使用的方法是:
//float 转 16进制
float x_pid_p = 15.0;
unsigned char * bValue = (unsigned char *)& x_pid_p;
printf("%x\t%x\t%x\t%x\n", bValue[0], bValue[1], bValue[2], bValue[3]);
set_buf[0] = bValue[0];
set_buf[1] = bValue[1];
set_buf[2] = bValue[2];
set_buf[3] = bValue[3];//16进制 转 float
//data是接受到的数据
float x;
unsigned char c[4];
c[0] = data[1];
c[1] = data[2];
c[3] = data[3];
c[4] = data[4];
memcpy(&x,c,4);
当然,上面的float换成int也可以,在gcc编译器下面,int也是4个字节的。
今天想说的,就是使用memcpy这个函数,可以任意转化。memcpy第一个参数,是目的地址,第二个参数是源地址,第三个是拷贝字节数。下面说的是float的相互转换。
//float型,下面c中第一个字节0xff,后面四个是float对应的内容。
float a = 10.5;
char c[5];
c[0]=0xff;
memcpy(c+1,&a,4);
//再把对应的float拷出来
float b;
memcpy(&b,c+1,4);
再说一下int型,可以根据自己的数据的大小,然后选择拷贝几位,如果我的数据是0-255,那么我直接拷贝一位就行了。
//int型,只拷贝一位就够了,高位自动忽略
int a=13;
char c[5];
c[0] = 0xff;
memcpy(c+1,&a,1);
//转化回来,也只需要拷贝1位就好
int b;
memcpy(&b,c+1,1);
printf("%d\n",d");
如果,设置的int的取值范围是两个字节,那就取两位。
同样的,如果是char数据之间拷贝也可以,因为他是直接把那么多位地址直接拷贝一下,使用起来比之前的方法简单多了。记录一下,方便自己,也方便和我一样的人。
这篇关于Linux float int和16进制互相转换的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!