場景:用Python模擬設備做 Modbus TCP 協議時,讀取到的寄存器值是S16(有符號16進制數),如何能得到正確的負數值呢?
代碼如下:
def get_s16(val): if val < 0x8000: return val else: return (val - 0x10000)
解釋:由於Python不是強類型的語言,對於數據的值的大小沒有嚴格的限制,所以可以直接通過做減法來獲得正確的負數值。如果是其他的強類型語言,就需要按照負數補碼原理來獲取到高位符號位值后再取反處理,獲得正確的負數值。