V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
rocbyte
V2EX  ›  程序员

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

  •  
  •   rocbyte · Nov 4, 2022 · 2123 views
    This topic created in 1272 days ago, the information mentioned may be changed or developed.

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

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

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

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

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

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

    所以根本没人能解决你的问题,大家全靠猜
    rocbyte
        7
    rocbyte  
    OP
       Nov 9, 2022
    @iX8NEGGn 这个问题解决了,是我表达的有问题 应该是 65534 这是一个带符号的 用 16 字节数据,当转成 int 时由 窄数据类型提升至宽数据类型时 应该进行符号位扩展,所以 65534 有符号数 变成 int 应该是 -2
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   3165 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 37ms · UTC 14:08 · PVG 22:08 · LAX 07:08 · JFK 10:08
    ♥ Do have faith in what you're doing.