当前位置: 首页 > 知识库问答 >
问题:

如何在python中将blob转换为整数?

颛孙智勇
2023-03-14

我有一些带有小端编码字节的文件,我想取N字节,指定endianess并使用python(任何版本)将它们转换为十进制数。如何正确执行?

共有3个答案

吕宣
2023-03-14

使用Python 3(或2),您可以使用结构库来实现这一点。

with open('blob.dat', 'rb') as f:
    data = f.read(n)

现在,使用适当的格式说明符字符串解包。例如,big-endian int:

num = struct.unpack(">i",data)
逄兴昌
2023-03-14

正如Harshad Mulmuley的回答所示,这在Python 3中很容易,使用int.from_bytes方法。在Python 2中,它有点棘手。

struct模块设计用于处理标准的C数据类型。它不会处理任意长度的整数(Python2longintegers),因为它们不是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那样多。

东方琪
2023-03-14

在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类型。不幸的是,我找不到简单的方法。你能帮我吗? 问题答案: 你只需要 投 操作数为浮点的至少一个: 要么 或(不必要)