十六进制字符串为两个18位整数

问题描述 投票:1回答:2

我是十六进制的新手,以前找不到任何类似的文章。例如,我有一个十六进制字符串50f116bcfb3b4d25d0,它是一个36位整数。不知道它是签名的还是未签名的。我想知道如何将十六进制的38位整数转换为python中的两个18位整数。

我在此post中看到了有关使用]将十六进制转换为16位有符号整数的信息>

def twos_complement(hexstr,bits):
     value = int(hexstr,16)
     if value & (1 << (bits-1)):
         value -= 1 << bits
     return value

twos_complement('FFFE',16)
-2

也会将其推广到38位整数twos_complement('b3b4d25d0',38)吗?

[为了分割整数,我看到this post使用以下方法将一个16位的int(x变量)分割为两个8位]]

c = (x >> 8) & 0xff
f = x & 0xff

(1030333333 >> 8) & 0xff
163
(1030333333 >> 8) 
4024739

也可以使用以下方法将其一般化为将已知的38位整数拆分为两个16位整数吗?

c = (x >> 16) & 0xff
f = x & 0xff

我是十六进制的新手,以前找不到任何类似的文章。我有一个十六进制字符串50f116bcf,b3b4d25d0,例如,它是一个36位整数。不确定是否已签名或...

python integer hex bit
2个回答
1
投票

假设十六进制字符串代表一个正整数,您只需将最后两行修改为

>>> value = 0x50f116bcf
>>> msb = (value >> 18) & (2**18 - 1)
>>> lsb = value & (2**18 - 1)

# and convert (msb, lsb) back into value by using the binary OR 
>>> (msb << 18) | lsb == value
True

0
投票

这里是基本转换器:

© www.soinside.com 2019 - 2024. All rights reserved.