V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
moremoney
V2EX  ›  程序员

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

  •  
  •   moremoney · 2022-11-04 16:29:54 +08:00 · 1575 次点击
    这是一个创建于 748 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

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

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

    所以根本没人能解决你的问题,大家全靠猜
    moremoney
        7
    moremoney  
    OP
       2022-11-09 13:09:22 +08:00
    @iX8NEGGn 这个问题解决了,是我表达的有问题 应该是 65534 这是一个带符号的 用 16 字节数据,当转成 int 时由 窄数据类型提升至宽数据类型时 应该进行符号位扩展,所以 65534 有符号数 变成 int 应该是 -2
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1175 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 18:13 · PVG 02:13 · LAX 10:13 · JFK 13:13
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.