我想写一个循环,以4B十六进制数字格式打印1到50000。但是,我需要十六进制数字采用小端格式,显示全部为零的零,并且在开头不显示“0x”。
示例:
数字50,000是十六进制的0xc350。
我想打印:50C30000
这就是我到目前为止,我只是不知道如何添加零以使其为4B格式:
import struct
print hex( struct.unpack( '<H', struct.pack('>H', 50000) ) [0] ) [2:].upper()
#Output is 50C3
〜感谢
答案 0 :(得分:5)
让我们假设你已经有了转换为小端工作的部分。您要问的部分是如何将数字格式化为特定字符串。
这正是format
函数的用途:
>>> h = 20675
>>> format(h, '04X')
50C3
完整的详细信息位于Format Specification Mini-Language,但简要介绍:
'X'
是类型字段,表示“十六进制格式。输出基数为16的数字,使用大写字母表示9位以上的数字。”'4'
是 width 字段,这意味着任何短于4个字符的内容都将被填充。'0'
是一个特殊情况,显然没有名称,但是“将宽度字段前置为零('0')字符可以为数字类型启用符号识别的零填充。这相当于填充字符“0”,对齐类型为“=”。“但是让我们重新审视第一句话。您不具有正确的字节交换,因为您需要一个32位的小端数字,并且您正在创建一个16位的数字。这就是'H'
的含义。如果你想要32位,你必须使用'I'
。
然后,当然,您需要将宽度从4
更改为8
。
答案 1 :(得分:0)
如何使用ljust
?
import struct
print hex( struct.unpack( '<H', struct.pack('>H', 50000) ) [0] ) [2:].upper().ljust(8, '0')
#Outputs 50C30000
ljust(8,'0')
证明左边的字符串,将字符串的长度更改为8个字符,如果指定了任何填充字符,则用该字符填充空格。这里填充字符被添加到字符串的right
。