arduino 进制转换如何解决
这个比较难搞,求助大佬,使用ARDUINO UNO 如何解决1,把recData数组内的十进制 64,01 转换成十六进制,64 =0x40,01=0x01
2,把转换后的十六进制进行重新组合,低位0x01字节放到高位,得到十六进制0x0140
3,把组合后的十六进制0x0140,转换为浮点数的十进制得到320
4,把float a除以 得到的十进制320,得到浮点数b,最终等于 -73.6125
这个怎么转换呢
float a=-23556.000;
float b;
byte recData = {64, 01, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
这是你的作业吧? 你弄出来没有?弄出来了分享下,想学:lol 看样子楼主问了很多难题
我就挑前面两个简单的来试试吧
关于这个数组
byte recData = {64, 01, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
看来很复杂,也没说明除了前两个之外其他的要怎么弄,所以我就只把前两个抽出来处理好了
另外,无论是16进制还是10进制,在无符号数上的值是完全一样。当然考虑到你可能需要用字符串形式打印出来,那么下面的程序中也给出了16进制的打印的语句。
要说明的是两个8位无符号数移位相加之后会的得到的是一个16位无符号数,求得这个16位无符号数,我这边也就技术冻结了。
之后什么浮点还要除法运算得太困难了,我能想到的是要么找个有FPU的高端处理器,要么找个能通过多次执行乘法运算来实现多位浮点除法的数学库来计算。总之剩下的楼主自己想办法解决吧
void setup() {
//开动串口
Serial.begin(9600);
delay(100);
byte recData = {64, 01, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
//先把数组前两个拿出来
byte b_high=recData;
byte b_low=recData;
//然后打印看看 16进制 长的是啥样
Serial.println(String(b_high,HEX));
Serial.println(String(b_low,HEX));
//接着弄个16位无符号数来保存结果
uint16_t my_result=(b_high << 8)+b_low;
//最后显示结果 16进制
Serial.println(String(my_result,HEX));
//10进制
Serial.println(String(my_result));
}
void loop() {
delay(5000);
Serial.println("It`s done.");
}
下面是运行结果:
16:48:16.913 -> 1
16:48:16.913 -> 40
16:48:16.913 -> 140
16:48:16.913 -> 320
16:48:16.913 -> It`s done.
页:
[1]