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

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

代码如下:

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

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

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

时间: 2024-08-29 06:49:13

Python中读取到16进制数如何转成有符号数值的相关文章

从文件读入16进制数转化为10进制数再输出到文件中

sSN LMDscandata 1 1 B98C27 0 0 85C0 85C3 F55D73C5 F55DCC81 0 0 7 0 0 1388 168 0 1 DIST1 3F800000 00000000 DBBA0 1388 B5 136C 1373 136B 1389 1398 1356 136D 1386 137B 139C 13C4 13F7 1531 174D 1751 1755 1765 176C 1777 177B 1784 1791 1796 17A8 17C0 17C6

C# 中2,10,16进制及其ASCII码之间转化

C# 中2,10,16进制及其ASCII码之间转化             --------//C#中各种字符类型的转化,使用于串口通信------------ //字符长度的理解            string s = "我是一个2兵";            int len = s.Length;//6个字符              byte[] sarr = System.Text.Encoding.Default.GetBytes(s);            len =

汇编一点点提高3——键盘输入8位二进制数,存入NUM单元,并在屏幕上显示对应的16进制数

此程序要注意一下几点: 1.dos1号功能--带回显的键盘输入,自动存入al 2.dos7号功能--不带回显的键盘输入,自动存入al,若要在屏幕中显示要调用DOS2号功能 3.将输入的多个二进制数转换为ASCII码 input:  mov ah,1  int 21h  add bl,bl  cmp al,'1'  jnz P1  inc bl  P1: dec ch  jnz input 4.换行子程序: newline: mov ah,2 mov dl,13 int 21h mov ah,2

随机生成16位的16进制数

利用Python的uuid模块生成16位的16进制数 #!/usr/bin/env python3 # -*- coding: utf-8 -*- import uuid for i in range(100): res = str(uuid.uuid4()) res = res.replace('-', '') print(res[:16]) 随机生成100个16位的16进制数: e77ddca3bb474c9d fb96d68a32754500 2c5dc4347fcd43c0 b51bff

字和字节和位和16进制数的关系

字 word 字节 byte 位 bit 字长是指字的长度 1字=2字节(1 word = 2 byte) 1字节=8位(1 byte = 8bit)  一个字的字长为16 一个字节的字长是8 两个16进制数! 一个字节八个比特,就是八个二进制位   0000 0000     0x00-0xFF (十进制0-255) 四个二进制数最大表示为15,就是一个16进制数,所以八位可以表示成两个16进制的数!

python IP地址转16进制

python IP地址转16进制 第一种方法: 通过socket.inet_aton实现 import socket from binascii import hexlify ary='192.168.1.1' packed_ip_addr = socket.inet_aton(ary) hexStr=hexlify(packed_ip_addr) print('IP:'+hexStr) 输出: IP:c0a80101 第二种方法: 将字符串分割成数组,在转换成16进制 ary='192.168

ASCII码转化16进制数

//将ASCII码转化为16进制数 if((ch>='0')&&(ch<='9'))        return ch-0x30;     else if((ch>='A')&&(ch<='F'))        return ch-'A'+10;     else if((ch>='a')&&(ch<='f'))        return ch-'a'+10;             else        retur

颜色中透明度转换为16进制的计算方法

颜色用6位16进制表示,如#ffffff,全为f,说明是各种颜色的组合,是白色. #000000是什么颜色都没有,那就是黑色.. 加上透明度,则再加2位16进制如:#00ffffff,共8位16进制的数字.前两位:00表示完全透明,ff表示完全不透明.其余的则根据不透明度的百分比来计算. 如白色,不透明度为30%,那么颜色值表示为#**ffffff表示白色,透明度的计算: 255x30%,转换为16进制数即可,为4c,所以8位颜色为:#4cffffff.

Python中数字之间的进制转换

https://www.cnblogs.com/Kingfan1993/p/9795541.html 在python中可以通过内置方法进行相应的进制转换,但需记得转化成非十进制时,都会将数字转化成字符串 转化成二进制 a = 10 #声明数字,默认十进制 b = bin(a) print(b , type(b)) 运行结果: 转化成八进制 a = 10 #声明数字,默认十进制 b = oct(a) print(b , type(b)) 运行结果: 转化成16进制 a = 10 #声明数字,默认十