from math import ceil
bytesAr = []
for num in hexValueAr:
count = ceil(num.bit_length() / 8)
bytes = num.to_bytes(count, 'big')
bytesAr.extend('{:02X}'.format(x) for x in bytes)
hexValueAr=['0x085F80','0x0109A53','0x0188C6D']
stripped = list(map(lambda x: x.split('x')[1], hexValueAr))
byte_list = []
for hex_string in stripped:
for i in range(3):
byte_list += [hex_string[2*i:2*i+2]]
print(byte_list)
int_to_hexbytes
使用%
格式化运算符将整型参数转换为包含其十六进制表示形式的字符串;然后使用列表理解将该字符串每秒钟拆分为一个列表(即每个字节)。注意,由于最左边的字节可能小于0x10
,所以代码预先加上一个'0'
(即当字符串长度为奇数时)。在words_to_hexbytes
只需迭代数组参数并附加int_to_hexbytes
的结果。在随后的
assert
只是测试代码的一种快速方法,同时向读者展示预期的结果。在你的整数是用十六进制编码的这一事实与问题无关。在
以及
^{pr2}$结果是相同的列表。在
Python整数已经有一个方法可以转换为字节:^{} 。{a3}很容易转换成{a2}。唯一的问题是,您需要预先知道要使用的字节数。在您的例子中,您可以使用数字3,也可以使用方法^{} 来计算它。在
以下是上述方法的一种可能实现方式:
这就产生了结果
这里的顺序是big-endian:整数的最高字节在数组的最低索引中。在
如果您想将其作为一条直线执行,可以执行以下操作:
这里一个可能的警告是,输入中的不同数字可能会给您输出中不同数量的元素。例如,如果您的输入是
[0x00AB, 0x109C]
,第一个元素将生成一个字符串,而第二个元素将生成2个字符串。如果您想避免这种情况,请找到对一个整数进行编码所需的最大字节数,并使用它来代替ceil(num.bit_length() / 8)
:在本例中,像
[0x00AB, 0x109C]
这样的输入将产生一堆零,但每个数字的字节数相等:['00', ''AB', '10', '9C']
。在相关问题 更多 >
编程相关推荐