码迷,mamicode.com
首页 > 编程语言 > 详细

Python中读取到16进制数如何转成有符号数值

时间:2019-06-28 21:12:01      阅读:442      评论:0      收藏:0      [点我收藏+]

标签:turn   符号位   tcp 协议   补码   没有   获取   有符号   强类型   严格   

场景:用Python模拟设备做 Modbus TCP 协议时,读取到的寄存器值是S16(有符号16进制数),如何能得到正确的负数值呢?

代码如下:

def get_s16(val):
    if val < 0x8000:
        return val
    else:
        return (val - 0x10000)

解释:由于Python不是强类型的语言,对于数据的值的大小没有严格的限制,所以可以直接通过做减法来获得正确的负数值。如果是其他的强类型语言,就需要按照负数补码原理来获取到高位符号位值后再取反处理,获得正确的负数值。

Python中读取到16进制数如何转成有符号数值

标签:turn   符号位   tcp 协议   补码   没有   获取   有符号   强类型   严格   

原文地址:https://www.cnblogs.com/yqmcu/p/11104617.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!