求助 65532 是如何转成 float -0.02 这个数的

2022-11-04 16:29:54 +08:00
 moremoney

这个数 是我从一台 modbus 机组上读出来的一个值,他在 wincc 上的数据类型是 32 位浮点数 IEEE 754, 格式 FloatToSignedWord 。

我怎么转也不成功,只有-1130113270 才能转成 -0.02 有没有大神只知道这个怎么弄

1412 次点击
所在节点    程序员
7 条回复
iX8NEGGn
2022-11-04 16:34:47 +08:00
float 有 -0.02 这个数?
moremoney
2022-11-04 16:50:10 +08:00
@iX8NEGGn 没明白你的意识
sujin190
2022-11-04 17:18:53 +08:00
你确定接收的是正确的或者没溢出,65532 就不符合 IEEE 754 格式的二进制编码
CodeCore
2022-11-04 17:39:40 +08:00
1. 要确认他用的是不是 IEEE754 ?
2. 是不是用的半精度浮点数?
3. 上面都不是,就要问一下,是不是定点数表示法。然后问他:符号位有没有,整数位多少 bit ,浮点数多少位?
gujigujij
2022-11-04 18:00:30 +08:00
原始报文是什么
iX8NEGGn
2022-11-04 18:03:36 +08:00
@moremoney

1. IEE 754 标准中,根本就无法精确表示 -0.02 这个数,所以 -0.02 是你舍入得到的,还是软件舍入得到的

2. 问题中”这个数“,到底是指 65532 还是 -0.02 ,不明白你的意思

3 ”FloatToSignedWord“,按字面意思是 float 的 32 位的二进制,转换成 16 位有符号数 ,16 位有符号数表示的范围在 -32768~32767 ,你又是如何的到 65532 这个值的

所以根本没人能解决你的问题,大家全靠猜
moremoney
2022-11-09 13:09:22 +08:00
@iX8NEGGn 这个问题解决了,是我表达的有问题 应该是 65534 这是一个带符号的 用 16 字节数据,当转成 int 时由 窄数据类型提升至宽数据类型时 应该进行符号位扩展,所以 65534 有符号数 变成 int 应该是 -2

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/892709

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX