极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 16319|回复: 3

arduino 进制转换如何解决

[复制链接]
发表于 2024-11-4 21:43:30 | 显示全部楼层 |阅读模式
这个比较难搞,求助大佬,使用ARDUINO UNO 如何解决
1,把recData[16]数组内的十进制 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[16] = {64, 01, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};  

回复

使用道具 举报

发表于 2024-12-31 09:14:51 | 显示全部楼层
这是你的作业吧?
回复 支持 反对

使用道具 举报

发表于 2025-4-30 15:18:06 | 显示全部楼层
你弄出来没有?弄出来了分享下,想学
回复 支持 反对

使用道具 举报

发表于 2025-4-30 16:57:39 | 显示全部楼层
看样子楼主问了很多难题
我就挑前面两个简单的来试试吧

关于这个数组
byte recData[16] = {64, 01, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};  
看来很复杂,也没说明除了前两个之外其他的要怎么弄,所以我就只把前两个抽出来处理好了
另外,无论是16进制还是10进制,在无符号数上的值是完全一样。当然考虑到你可能需要用字符串形式打印出来,那么下面的程序中也给出了16进制的打印的语句。
要说明的是两个8位无符号数移位相加之后会的得到的是一个16位无符号数,求得这个16位无符号数,我这边也就技术冻结了。
之后什么浮点还要除法运算得太困难了,我能想到的是要么找个有FPU的高端处理器,要么找个能通过多次执行乘法运算来实现多位浮点除法的数学库来计算。总之剩下的楼主自己想办法解决吧

  1. void setup() {
  2.   //开动串口
  3.   Serial.begin(9600);
  4.   delay(100);
  5.   
  6.   byte recData[16] = {64, 01, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};  
  7.   //先把数组前两个拿出来
  8.   byte b_high=recData[1];
  9.   byte b_low=recData[0];
  10.   
  11.   //然后打印看看 16进制 长的是啥样
  12.   Serial.println(String(b_high,HEX));
  13.   Serial.println(String(b_low,HEX));
  14.   
  15.   //接着弄个16位无符号数来保存结果
  16.   uint16_t my_result=(b_high << 8)+b_low;
  17.   
  18.   //最后显示结果 16进制
  19.   Serial.println(String(my_result,HEX));
  20.   //10进制
  21.   Serial.println(String(my_result));
  22. }

  23. void loop() {
  24.   delay(5000);
  25.   Serial.println("It`s done.");
  26. }
复制代码


下面是运行结果:

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.
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|联系我们|极客工坊

GMT+8, 2026-6-29 08:48 , Processed in 0.037649 second(s), 20 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表