解码NumPy int64二进制表示

3

我做了一件愚蠢的事情,忘记将一些值明确转换为SQLite数据库中要存储的INT类型(使用Python的SQLalchemy)。该列应设置为存储一个INT,而实际输入是numpy.int64 dtype。

从数据库中取回的值如下:

b'\x15\x00\x00\x00\x00\x00\x00\x00'

看起来SQLite已经存储了这些值的二进制表示,而不是整数本身。

有没有办法在Python中解码这些值,或者我必须重新加载所有数据(这并不是一个微不足道的练习)?

1个回答

4
你可以使用 struct.unpack()
>>> import struct
>>> value = struct.unpack('<q', b'\x15\x00\x00\x00\x00\x00\x00\x00')
>>> value
(21,)
>>> value[0]
21

这假设数据是按照unpack()格式字符串中的<指定的小端顺序存储的,并且它是一个带符号的“long long”(8个字节),如q所指定的那样。如果数据是大端的:

>>> struct.unpack('>q', b'\x15\x00\x00\x00\x00\x00\x00\x00')
(1513209474796486656,)

我认为在这种情况下,小端序更有可能是正确的。

补充:我刚刚证实,当一个numpy.int64插入到SQLite的int字段中时,可以像上面显示的那样使用struct.unpack()进行检索。


谢谢,这很有效。数据确实是小端的。 - Andrew Guy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接