使用Python 3(或2),您可以使用结构库来实现这一点。
with open('blob.dat', 'rb') as f:
data = f.read(n)
现在,使用适当的格式说明符字符串解包。例如,big-endian int:
num = struct.unpack(">i",data)
正如Harshad Mulmuley的回答所示,这在Python 3中很容易,使用int.from_bytes
方法。在Python 2中,它有点棘手。
struct
模块设计用于处理标准的C数据类型。它不会处理任意长度的整数(Python2long
integers),因为它们不是C语言固有的。但是你可以使用一个简单的for
循环来转换它们。我预计这将比Python 3 way慢很多,因为Pythonfor
循环比以C速度循环要慢,就像int.from_bytes
(可能)那样。
from binascii import hexlify
def int_from_bytes_LE(s):
total = 0
for c in reversed(s):
total = (total << 8) + ord(c)
return total
# Test
data = (
(b'\x01\x02\x03\x04', 0x04030201),
(b'\x01\x02\x03\x04\x05\x06\x07\x08', 0x0807060504030201),
(b'\x01\x23\x45\x67\x89\xab\xcd\xef\x01\x23\x45\x67\x89\xab\xcd\xef',
0xefcdab8967452301efcdab8967452301),
)
for s, u in data:
print hexlify(s), u, int_from_bytes_LE(s)
#print(hexlify(s), u, int.from_bytes(s, 'little'))
输出
01020304 67305985 67305985
0102030405060708 578437695752307201 578437695752307201
0123456789abcdef0123456789abcdef 318753391026855559389420636404904698625 318753391026855559389420636404904698625
(我把Python3打印调用放在那里,这样你就可以很容易地验证我的函数是否给出了与int.from_bytes
相同的结果)。
如果您的数据非常大,并且您不想浪费RAM来反转字节字符串,可以这样做:
def int_from_bytes_LE(s):
m = 1
total = 0
for c in s:
total += m * ord(c)
m <<= 8
return total
当然,这会为m
使用一些RAM,但它不会像用于反转输入字符串的RAM那样多。
在Python 3中,您可以使用这样的内容:
int.from_bytes(byte_string, byteorder='little')
问题内容: 我有一个来自MySQL查询的元组,像这样: 我想将所有字符串元素转换为整数,然后将它们放回列表列表中: 我试图用它来实现它,eval但是还没有得到任何体面的结果。 问题答案: 是Python标准的内置函数,用于将字符串转换为整数值。你可以使用包含数字作为参数的字符串来调用它,然后返回转换为整数的数字: 上面的照片2。 如果你知道列表T1的结构(它仅包含列表,仅一个级别),则可以在Pyt
问题内容: 我需要将图像上传到NodeJS服务器到某个目录。我正在为此使用节点模块。 我使用以下代码将图片转换为Blob: 我需要一种将Blob转换为文件以上传图像的方法。 有人可以帮我吗? 问题答案: 此函数将a转换为a ,对我来说效果很好。 香草JavaScript TypeScript (具有正确的键入) 用法
我需要上传一个图像到NodeJS服务器到一些目录。我使用的节点模块。 我拥有图像的,我使用以下代码将其转换为blob: 我需要一种方法来将blob转换为文件以上载图像。 有人能帮我吗?
问题内容: 如何在python中将YYYY-MM-DD hh:mm:ss格式转换为整数?例如2014-02-12 20:51:14->转换为整数。 我知道如何仅转换hh:mm:ss,但不转换 yyyy-mm-dd hh:mm:ss 问题答案: 这取决于整数应编码的内容。您可以将日期转换为以前某个时间的毫秒数。人们通常将其粘贴到1970年1月1日上午12:00或1900等,然后以该点之后的整数毫秒为
问题内容: 我想创建一种计算整数和大十进制乘法的方法。我在Google和论坛上搜索没有找到任何内容。 有人能帮我吗? 问题答案: 要将整数(或字节/短/浮点数/双精度数)与BigInteger(或BigDecimal)相乘,必须先将本机数字转换为BigInteger / BigDecimal。 注意:是不一样的,而且在不同的原因的BigDecimal和BigInteger的。在这两种情况下,我建议
问题内容: 我有两个整数和。我需要计算,作为结果,我想浮动。例如,作为结果,我希望得到1.5。我认为,最简单的(或唯一的)的方式来做到这一点是转换和成float类型。不幸的是,我找不到简单的方法。你能帮我吗? 问题答案: 你只需要 投 操作数为浮点的至少一个: 要么 或(不必要)