python (正负)十六进制与十进制的互相转换

老实说非常的气人,尤其是最近弄传感器,几乎每个传感器给python的十六进制或者我发的十进制都不对,经过测试,目前有这几种情况
其他python常用的十进制、16进制、字符串、字节串之间的转换
**1.python自带转换的十六进制.

2.int16转16进制 #无符号整形变的十六进制

3.int32转16进制 #有符号的整形变的十六进制

4.字符串转16进制 #字符串变来的十六进制**

1.的话非常神奇,也是我在某些传感器的返回值总结得到的如果你使用python的 hex() 方法直接对负数进行输出那么得到的就是,将你输入的数分割成符号和数值两部分,则你会得到一个带着符号的十六进制数(简直%%%@#$%&()&())),

import struct



a=struct.pack('i',-10014) # int32  为 4给十六进制的字节构成,int (有符号) 使用 i 输出:d8dcffff
print(a.hex())
print("\n")
c =b'\xff\xff\xd8\xe2'
c2 =b'\xe2\xd8\xff\xff'
c3 = c[::-1]
print(c3)
print(struct.unpack('i',c3)) # int


#D:\Anaconda\envs\3d\python.exe F:/open3d_cs/LMS141/多模型拼接/cs2.py
#e2d8ffff


#b'\xe2\xd8\xff\xff'
#(-10014,)

#进程已结束,退出代码 0




b = -6231
print(hex(b))
#输出 -0x1857

而实际上,在使用的过程中,负数直接就是一个十六进制数,并没有带符号,则处理方式应该如下这样…

#正
a  = 6231
print("6231的正十六进制:" + str(hex(a)))

#负
b = -6231
b2 = -b
b = 0xffff - b2+ 0x0001
print("-6231的负十六进制:" + str(hex(b)))

#输出
#6231的正十六进制:0x1857
#-6231的负十六进制:0xe7a9

2-4的类型的十六进制与十进制互相转换就在下面的代码里,复制下来自己试吧…或者看开发文档里有写类型的话,直接找下面对应的,不用一个一个试

import struct
import binascii

a=struct.pack('h',-9000) # int16  为 short (有符号位) 使用 h 输出:d8dc
print(a.hex())
print("\n")

a=struct.pack('i',-9000) # int32  为 4给十六进制的字节构成,int (有符号) 使用 i 输出:d8dcffff
print(a.hex())
print("\n")

a='adcdadbc'
# a='00000000'
b=binascii.a2b_hex(a.encode())
print(b) #bytes类型,输出 b'\xad\xcd\xad\xbc'
print(b.hex()) #十六进制 输出:adcdadbc
print(struct.unpack('i',b)) # int
print(struct.unpack('f',b)) # float

c=struct.pack('h',0)
print(c.hex())



d8dc
d8dcffff
b'\xad\xcd\xad\xbc'
adcdadbc
(-1129460307,)
(-0.021216237917542458,)
0000

补:输入十进制输出 倒序的十六进制方法封装

import struct



def dec_to_hex(dec_num):
    """用于将输入的十进制数转换成十六进制,并按照关机电机的规则模式,两个字符一组倒序输出"""
    hex_bytes = struct.pack('i', dec_num) # int32  为 4给十六进制的字节构成,int (有符号) 使用 i 输出:d8dcffff
    print(type(hex_bytes))

    hex_string = hex_bytes.hex()

    print(hex_string)
    print(type(hex_string))
    new_string = hex_string[6:8] + " " + hex_string[4:6] + " " + hex_string[2:4] + " " + hex_string[0:2]
    print(new_string)





dec_to_hex(10000)

输出:

<class 'bytes'>
10270000
<class 'str'>
00 00 27 10

### Python十六进制十进制的方法 在Python中,可以通过多种方式实现十六进制十进制转换。最常用的是利用内置函数 `int()` 来完成这一操作。 #### 使用 `int()` 函数进行转换 `int()` 函数接受两个参数:要转换的数值字符串以及该数值所使用的基数。对于十六进制数而言,基数应设为16。下面是一个具体的例子: ```python hex_num = "0x4F" dec_num = int(hex_num, 16) print(f"Hexadecimal {hex_num} is converted to Decimal as: {dec_num}") ``` 这段代码展示了如何将带有前缀 '0x' 的十六进制串 `"0x4F"` 成功转化为对应的十进制整数并输出结果[^2]。 如果输入不带 `'0x'` 前缀,则可以直接传入不含此标记的纯字母数字组合作为第一个参数给 `int()` 函数: ```python hex_str = "FFA5" decimal_value = int(hex_str, 16) print(f"The hexadecimal string '{hex_str}' converts to the decimal value of {decimal_value}.") ``` 上述代码片段说明了即使没有 `'0x'` 前缀也可以正常工作的情况[^5]。 另外值得注意的是,在实际应用过程中还可以处理用户交互式的场景,比如让用户通过命令行界面输入想要转换的数据: ```python user_input_hex = input("Please enter a hexadecimal number:") converted_decimal = int(user_input_hex, 16) print(f"You entered hexadecimal {user_input_hex}, which equals to decimal {converted_decimal}.") ``` 这里展示了一种更加灵活的方式让程序能够接收来自用户的任意合法形式的十六进制数据,并即时给出其等价的十进制表示。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员进化不脱发!

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值