字节和整数、连接和python

字节和整数、连接和python,python,byte,md5,Python,Byte,Md5,我有2个32位无符号整数 777007543 和 114997259 以及字节字符串 0x47 0x30 0x22 0x2D 0x5A 0x3F 0x47 0x58 我如何让python给我这3个的连接,这样我就 0x2E 0x50 0x31 0xB7 0x06 0xDA 0xB8 0x0B 0x47 0x30 0x22 0x2D 0x5A 0x3F 0x47 0x58 然后我将通过md5哈希运行它,并得到 0x30 0x73 0x74 0x33 0x52 0x6C 0x26 0x71 0x2D

我有2个32位无符号整数

777007543 和 114997259

以及字节字符串

0x47 0x30 0x22 0x2D 0x5A 0x3F 0x47 0x58

我如何让python给我这3个的连接,这样我就

0x2E 0x50 0x31 0xB7 0x06 0xDA 0xB8 0x0B 0x47 0x30 0x22 0x2D 0x5A 0x3F 0x47 0x58

然后我将通过md5哈希运行它,并得到

0x30 0x73 0x74 0x33 0x52 0x6C 0x26 0x71 0x2D 0x32 0x5A 0x55 0x5E 0x77 0x65 0x75

如果有人能在python代码中运行这一点,那将不胜感激

q = hex(777007543) + hex(114997259)[2:] + '4730222d5a3f4758'
就这么做吧。以下是它工作的原因:

>>> num1, num2
(777007543, 114997259)
>>> hex(num1), hex(num2)
('0x2e5031b7', '0x6dab80b')
>>> hex(num1) + hex(num2) + '0x4730222d5a3f4758'
'0x2e5031b70x6dab80b0x4730222d5a3f4758'
>>> hex(num1) + hex(num2)[2:] + '4730222d5a3f4758'
'0x2e5031b76dab80b4730222d5a3f4758'
>>> int(_, 16)
3847554995347152223960862296285071192L
然而,如果你愿意的话,准确地处理你在回答中的表述并不困难

编辑:

下面是斯科特·格里菲茨说的。他是对的;)

"

使用十六进制只能在这里工作,因为 数字足够大,需要8个十六进制 数字。我们需要使用一种格式,例如 示例
“{0:08x}{1:08x}”。格式(num1,
num2)
将用多达 八个零

"


这将为您提供所需的所有值的列表

>>> [777007543 >> i & 0xff for i in xrange(24,0,-8)] + \
... [114997259 >> i & 0xff for i in xrange(24,0,-8)] + \
... map(ord, stringofbytes)
甚至更好(从你开始的时候)

如果您希望将其作为字符串传递给md5哈希

>>> map(chr, _)

我假设字符串的每个字节都代表一个1字节的数字。

Python2还是Python3?你说的“字节串”到底是什么意思?如果我把它打印出来,它看起来像是b’……它是通过套接字“可能是python 3”接收到的最后8个字节?有趣的请你做
导入系统;系统版本
并发布答案?“可能”是无用的、无信息的。@用户字符串在Python 3中发生了根本性的变化。这个问题的任何答案都是针对2或3的。因此,除非您想同时支持这两种方法(如果是这样,您应该有充分的理由),否则您确实需要决定使用哪一种方法,并让我们知道。@S.Lott:“Informative”+1用于发明词语来斥责新用户。:-)+1:struct.pack。处理大端和小端非常优雅。-哈,有人在这个网站上链接到我的博客,抱怨我的实现不起作用。。。不管怎么说,现在是这样了!虽然它看起来已经这样做了。使用
hex
只能在这里工作,因为数字足够大,需要8个十六进制数字。对于较小的数字,您需要使用
格式
来正确地填充零。例如
'{0:08x}{1:08x}'。格式(num1,num2)
将用最多八个零填充十六进制。
import struct
import hashlib

x = struct.pack('>II8B', 777007543, 114997259, 0x47, 0x30, 0x22, 0x2D, 0x5A, 0x3F, 0x47, 0x58)
hash = hashlib.md5(x).digest()

print [hex(ord(d)) for d in x]
(output) ['0x2e', '0x50', '0x31', '0xb7', '0x6', '0xda', '0xb8', '0xb', '0x47', '0x30', '0x22', '0x2d', '0x5a', '0x3f', '0x47', '0x58']

print [hex(ord(d)) for d in hash]
(output) ['0x30', '0x73', '0x74', '0x33', '0x52', '0x6c', '0x26', '0x71', '0x2d', '0x32', '0x5a', '0x55', '0x5e', '0x77', '0x65', '0x75']
import struct
import hashlib

x = struct.pack('>II8B', 777007543, 114997259, 0x47, 0x30, 0x22, 0x2D, 0x5A, 0x3F, 0x47, 0x58)
hash = hashlib.md5(x).digest()

print [hex(ord(d)) for d in x]
(output) ['0x2e', '0x50', '0x31', '0xb7', '0x6', '0xda', '0xb8', '0xb', '0x47', '0x30', '0x22', '0x2d', '0x5a', '0x3f', '0x47', '0x58']

print [hex(ord(d)) for d in hash]
(output) ['0x30', '0x73', '0x74', '0x33', '0x52', '0x6c', '0x26', '0x71', '0x2d', '0x32', '0x5a', '0x55', '0x5e', '0x77', '0x65', '0x75']