利用python进行负数向二进制和十六进制的相互转换

一、负数向二进制和十六进制转换

负数neg=-45054,为int数据类型

方法一:

求负数十六进制的公式为:

            负数十六进制 = hex ( 负数  &  0xFF....FF )  (注意:几个F取决于数据类型的范围,如int数据类型取0xFFFFFFFF)

neg十六进制 = hex(-45054 & 0xFFFFFFFF) = hex(4294922242) = 0xFFFF5002

neg二进制 = bin(neg十六进制)= bin(0xFFFF5002) = 11111111111111110101000000000010

方法二:

利用struct模块求负数的十六进制

import struct

s_hex_neg = pack('i', neg) = '\x02P\xff\xff'       //这里是十六进制的可见字符ascii表示

扫描二维码关注公众号,回复: 3264136 查看本文章

利用binascii.hexlify将可见字符也进行十六进制表示

hex_neg = binascii.hexlify(s_hex_neg) = 0250ffff

将hex_neg进行逆置就是其十六进制

hex_neg[::-1] = ffff0520

二、十六进制还原成负数和二进制

neghex=0xFFFF0520,是int数据类型

1.十六进制转为二进制

negbin = bin(neghex)='0b11111111111111110000010100100000' 

如果neghex_s='0xFFFF0520', 是字符串表示,那么negbin=bin(int(neghex_s, 16))='0b11111111111111110000010100100000'

2.十六进制还原为负数

先提取为十六进制的字符串,并逆置

neghex_s = hex(neghex)[2:-1] = 'ffff0520'

neghex_s=neghex_s[::-1] = '0250ffff'

使用binascii.unhexlify进行去十六进制化

neghex_pack=binascii.unhexlify(neghex_s)='\x02P\xff\xff'

再利用struct.unpack进行解析

neg=struct.unpack('i', neghex_pack)=(-45054,)

那么neg[0]就是neghex还原的负数

三、二进制向十六进制和负数转化

neg_bin_s='11111111111111110000010100100000',字符串类型

1.二进制向十六进制转化

首先将neg_bin_s按四个字符一组进行分割,然后求其十六进制表示,只要求出十六进制表示,就可以参考“二”进行处理了

neg_bin_list=[]

for i in range(0, len(neg_bin_s), 4):

     neg_bin_list.append(neg_bin_s[i:i+4])

neg_bin_list=['1111', '1111', '1111', '1111', '0000', '0101', '0010', '0000']

求取0~15的二进制到十六进制字符的key-value映射

hex_map={}

 for i in range(0,16):
     hex_map[bin(i)[2:].zfill(4)]=hex(i)[2:]

以neg_bin_list元素为key,求取其表示的十六进制字符

neg_hex_s=''

for i in neg_bin_list:

     neg_hex_s += hex_map[i]

求得:neg_hex_s = 'ffff0520'

从而,求得该二进制字符串对应的十六进制为0xFFFF0520

2.二进制还原成负数

在上面步骤1中求得二进制对应的十六进制为‘ffff0520',那么参考“十六进制还原成负数”的做法,可以求出负数

将十六进制"ffff0520"逆置

neghex_s=neg_hex_s[::-1] = '0250ffff'

使用binascii.unhexlify进行去十六进制化

neghex_pack=binascii.unhexlify(neghex_s)='\x02P\xff\xff'

再利用struct.unpack进行解析

neg=struct.unpack('i', neghex_pack)=(-45054,)

那么neg[0]就是二进制字符串neg_bin_s还原的负数

  

猜你喜欢

转载自blog.csdn.net/ZHUJIANWEILI4/article/details/82018163