如何以小端,填充零和十字形零点打印十六进制数字,而不是n#39; 0x'在python?

时间:2014-09-19 19:58:05

标签: python format hex

我想写一个循环,以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

〜感谢

2 个答案:

答案 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