我是十六进制的新手,以前找不到任何类似的文章。例如,我有一个十六进制字符串50f116bcf
,b3b4d25d0
,它是一个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位整数。不确定是否已签名或...
假设十六进制字符串代表一个正整数,您只需将最后两行修改为
>>> 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
这里是基本转换器: