LUA 4字节转浮点数


例如现场有力传感器,发送以下16进制数据后,得到如下返回数据,其中18后开始的每4个字节为一个浮点数(高字节在前,低字节在后)

读浮点数格式的测量值:
发送: 01 03 04 00 00 0c 44 77

返回: 01 03 18 46 23 A3 14 C6 23 B7 14 00 00 00 00 00 00 00 00 00 00 00 0 00 00 00
00 5B 70

可以使用以下代码进行4字节与浮点数的转换

function Byte2Float(d, SmallEndian)
  -- d为四个字节的数组
  out = d[1]
  out = (out << 8) | d[2]
  out = (out << 8) | d[3]
  out = (out << 8) | d[4]

  if BigEndian == nil then
    out = string.pack("<I4", out)
  else
    out = string.pack(">I4", out)
  end
  out = string.unpack("f", out)
  return out
end

a = {0x46, 0x23, 0xA3, 0x14}
-- a对应的结果为10472.76953125
print("转换后结果")
print(Byte2Float(a))
--如果低字节在前,使用Byte2Float(a,True)
点击显示全文
赞同0
发表评论
分享

手机扫码分享
0
456
收藏
举报
收起
登录
  • 密码登录
  • 验证码登录
还没有账号,立即注册
还没有账号,立即注册
注册
已有账号,立即登录
选择发帖板块
上传文件
举报
请选择举报理由
举报
举报说明