背景
本文主要涉及到的是一种串口通讯的数据处理方法,主要是为了解决浮点数在串口通讯中的传输问题;通常而言,整形的数据类型,只需进行移位运算按位取出每个字节即可,那么遇到浮点型的数据类型该怎么处理呢?下文介绍了一种方法,用来解决该问题。
简单描述
整形的处理方法
例如在串口通讯的时候处理一个整形的数据,如下面代码所示:
- 将整形数据处理成字节发出
int n = 124;
byte t1 = n >> 0;
byte t2 = n >> 8;
byte t3 = n >> 16;
byte t4 = n >> 24;
- 将字节数组处理成整形接收
int result = 0;
byte[] tt = {2,3,4,5};
result |= (tt[3] & 0xff) << 24;
result |= (tt[2] & 0xff) << 16;
result |= (tt[1] & 0xff) << 8;
result |= (tt[0] & 0xff) << 0;
浮点型的数据处理方式
- 将浮点型数据处理成字节发出(C/kotlin)
fun main() {
val t1=12.3f;
val t2 = t1.toBits()
println(t2)
}
#include <iostream>
using namespace std;
union uniontest
{
float t1;
int t2;
};
int main(){
uniontest ut;
ut.t1=12.3;
cout << ut.t2 << endl;
return 0;
}
- 将字节数组处理成浮点型接收
val t3 = Float.fromBits(t2)
println(t3)
#include <iostream>
using namespace std;
union uniontest
{
float t1;
int t2;
};
int main(){
uniontest ut;
ut.t1=12.3;
cout << ut.t2 << endl;
ut.t2=1095027917;
cout << ut.t1 << endl;
return 0;
}
原理描述
不管是Java,C++,kotlin或者其他语言实现,底层都是用C来实现的,主要是用到了联合体的知识,联合体主要是用来共享内存,内部会进行字节对齐,按照最大字节数的数据内存来决定联合体的内存占用大小。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)