【问题标题】:Convert binary to signed decimal将二进制转换为有符号十进制
【发布时间】:2014-06-20 12:06:01
【问题描述】:

我想在 matlab 中使用经典函数将二进制向量转换为有符号十进制。

我有一个向量byte = [1 0 0 0 0 0 1 0]

如果我用 byte = bi2de(byte, 'left-msb') 将其转换为十进制,我得到 130,但如果我将这个字节插入计算器,我得到 -126,ergo 签名。

我试过byte = typecast(bi2de(byte, 'left-msb'), 'int32'),但失败得很惨。

我将如何实现这一目标?

【问题讨论】:

    标签: matlab binary decimal signed


    【解决方案1】:

    一种方法:

    >> typecast(uint8(bi2de(byte, 'left-msb')), 'int8')
    
    ans =
    
     -126
    

    【讨论】:

    • 所以问题是如果我做了'uint32'?我不能把它提取到32位而不破坏价值和内涵
    • 我想是的。如果你想要它在有符号的 int 32 中,你应该先转换为 uint32(转换数组),然后将 typecast 转换为 int32 以使其签名。
    • 我正在读取字节并将它们从这样的文件转换为 dec: byte = de2bi(fread(fr, 1), 32, 'right-msb') byte = typecast(uint32(bi2de (byte, 'left-msb')), 'int32') 如果字节为 13,我应该得到 -1.3422e+09,但我得到 1342177280
    • 如果我删除类型转换并执行 byte = de2bi(fread(fr, 1), 32, 'right-msb') byte = bi2de(byte, 'left-msb') 我得到1.3422e+09 所以我少了一个减号
    • 尝试像这样byte = [de2bi(fread(fr, 1), 8, 'right-msb') zeros(1, 24)]阅读你的字节
    【解决方案2】:

    您需要在一行中完成吗?如果您知道它将被解释为无符号,则可以在 if 语句中捕获大于 127 的值。

    if (byte > 127)
        byte = byte - 256;
    end
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-12-04
      • 2014-05-21
      • 2021-04-18
      • 2021-07-02
      • 2011-09-03
      • 2012-06-26
      • 1970-01-01
      相关资源
      最近更新 更多