【发布时间】:2011-01-17 05:02:06
【问题描述】:
我想将一个整数(即
例如:我想传入65 并退出'\x41',或者255 并得到'\xff'。
我已经尝试使用struct.pack('c',65) 执行此操作,但由于它想要接收单个字符串,因此会阻塞9 以上的任何内容。
【问题讨论】:
我想将一个整数(即
例如:我想传入65 并退出'\x41',或者255 并得到'\xff'。
我已经尝试使用struct.pack('c',65) 执行此操作,但由于它想要接收单个字符串,因此会阻塞9 以上的任何内容。
【问题讨论】:
您正在寻找chr 函数。
您似乎混合了整数的十进制表示和整数的十六进制表示,因此您需要什么并不完全清楚。根据您提供的描述,我认为其中一个 sn-ps 显示了您想要的内容。
>>> chr(0x65) == '\x65'
True
>>> hex(65)
'0x41'
>>> chr(65) == '\x41'
True
请注意,这与包含一个十六进制整数的字符串完全不同。如果这是您想要的,请使用 hex 内置函数。
【讨论】:
chr 根本不涉及 ASCII——它只需要一个数字并生成一个单字节的字节串,其中字节的序数值是数字。当您编写和显示字节串时,ASCII 和 ASCII 兼容的编码就会发挥作用。
'A' 成为另一种写入和显示'\x41' 的方式进入。所有str 真正关心的是这是六十五岁的事实。为了使事物可以被人类理解和使用,它通常变成 A。
试试:
"0x%x" % 255 # => 0xff
或
"0x%X" % 255 # => 0xFF
Python 文档说:“把它放在你的枕头下:http://docs.python.org/library/index.html”
【讨论】:
"%#x" % 255 :)
【讨论】:
repr(chr(255)) # '\xff' 也实现了这一点
这会将整数转换为带有 0x 前缀的 2 位十六进制字符串:
strHex = "0x%0.2X" % 255
【讨论】:
如果您想打包一个值 format B instead of c。 C 将字符转换为字符串(本身不太有用),而 B 将整数转换。
struct.pack('B', 65)
(是的,65 是 \x41,而不是 \x65。)
结构类还可以方便地处理字节序以进行通信或其他用途。
【讨论】:
我想将一个随机整数转换成一个以#开头的六位十六进制字符串。为了得到这个,我使用了
"#%6x" % random.randint(0xFFFFFF)
【讨论】:
"#%6x" % random.randint(0x0, 0xFFFFFF)。 (在6 和randint 之前缺少% 需要2 个参数-下界和上界-)
请注意,对于较大的值,hex() 仍然有效(其他一些答案无效):
x = hex(349593196107334030177678842158399357)
print(x)
Python 2:0x4354467b746f6f5f736d616c6c3f7dL
Python 3:0x4354467b746f6f5f736d616c6c3f7d
对于解密的 RSA 消息,可以执行以下操作:
import binascii
hexadecimals = hex(349593196107334030177678842158399357)
print(binascii.unhexlify(hexadecimals[2:-1])) # python 2
print(binascii.unhexlify(hexadecimals[2:])) # python 3
【讨论】:
hex(hash(text)),它产生了一个负整数,导致一个带有减号的十六进制字符串。是谁实施的?
这对我来说效果最好
"0x%02X" % 5 # => 0x05
"0x%02X" % 17 # => 0x11
如果您想要一个宽度更大的数字(2 代表 2 个十六进制打印字符),请更改 (2),这样 3 将为您提供以下内容
"0x%03X" % 5 # => 0x005
"0x%03X" % 17 # => 0x011
【讨论】:
您可以使用另一种表示方式
[in] '%s' % hex(15)
[out]'0xf'
【讨论】:
让我添加这个,因为有时您只需要单个数字表示
(x 可以是小写,'x',也可以是大写,'X',选择决定了输出字母是大写还是小写。):
'{:x}'.format(15)
> f
现在你可以使用新的f'' 格式字符串:
f'{15:x}'
> f
要添加 0 填充,您可以使用 0>n:
f'{2034:0>4X}'
> 07F2
注意:
f'{15:x}'中的初始 'f' 表示格式字符串
【讨论】:
使用format(),按照format-examples,我们可以这样做:
>>> # format also supports binary numbers
>>> "int: {0:d}; hex: {0:x}; oct: {0:o}; bin: {0:b}".format(42)
'int: 42; hex: 2a; oct: 52; bin: 101010'
>>> # with 0x, 0o, or 0b as prefix:
>>> "int: {0:d}; hex: {0:#x}; oct: {0:#o}; bin: {0:#b}".format(42)
'int: 42; hex: 0x2a; oct: 0o52; bin: 0b101010'
【讨论】:
(int_variable).to_bytes(bytes_length, byteorder='big'|'little').hex()
例如:
>>> (434).to_bytes(4, byteorder='big').hex()
'000001b2'
>>> (434).to_bytes(4, byteorder='little').hex()
'b2010000'
【讨论】:
您还可以将任何基数的任何数字转换为十六进制。在这里使用这一行代码很容易使用:
hex(int(n,x)).replace("0x","")
您有一个字符串 n 是您的号码,x 是该号码的基数。首先,将其更改为整数,然后更改为十六进制,但十六进制的第一个有0x,所以我们将replace 删除。
【讨论】:
hex(int(n,x))[2:] - 不确定哪个更快:)