解码NumPy int64二进制表示

时间:2016-07-08 06:09:08

标签: python sqlite numpy sqlalchemy

所以我做了一个愚蠢的事情,并且忘了显式地将我输入的一些值转换为SQLite数据库(使用Python的SQLalchemy)。该列设置为存储INT,而输入实际上是numpy.int64 dtype。

我从数据库中返回的值如下所示:

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

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

有没有办法在Python中解码这些值,还是我再次加载所有数据(此时不是一个简单的练习)?

1 个答案:

答案 0 :(得分: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字节)。 {1}}。如果数据是大端:

q

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

P.S。我刚刚确认,当>>> struct.unpack('>q', b'\x15\x00\x00\x00\x00\x00\x00\x00') (1513209474796486656,) 插入到SQLite numpy.int64字段中时,可以使用int检索它,如上所示。