Python 将从文件中读取的二进制序列转换为固定点数
我正在尝试解析一个文件,其中包含瘙痒消息: , , 每个价格表示为一个32位的固定点数,包含18个整部分位和14个小数部分位。(6位整数后接4位小数) e、 g 我已经看过struct类,但它只处理从二进制编码的c结构转换而来的整个字节Python 将从文件中读取的二进制序列转换为固定点数,python,binary,fixed-point,algorithmic-trading,datafeed,Python,Binary,Fixed Point,Algorithmic Trading,Datafeed,我正在尝试解析一个文件,其中包含瘙痒消息: , , 每个价格表示为一个32位的固定点数,包含18个整部分位和14个小数部分位。(6位整数后接4位小数) e、 g 我已经看过struct类,但它只处理从二进制编码的c结构转换而来的整个字节 我已经看过decimal.decimal模块,但似乎只能使用字符串对其进行实例化,这假设您已经拥有字符串格式的数字。Python的struct.unpack()正是您所需要的。您只需要制定适当的格式字符串,这样模块就可以知道哪些字段在哪里以及它们的二进制格式,并
我已经看过decimal.decimal模块,但似乎只能使用字符串对其进行实例化,这假设您已经拥有字符串格式的数字。Python的
struct.unpack()
正是您所需要的。您只需要制定适当的格式字符串,这样模块就可以知道哪些字段在哪里以及它们的二进制格式,并且您应该能够快速解码数据
你用比特来解释事情,但这并不是瘙痒真正的工作原理。固定小数字段的长度实际上是N字节,并隐含一些小数移位。因此,您可以将价格字段读取为整数,然后将其除以1e4以获得浮点值。Struct.unpack不起作用-因为OP的数字是以ASCII表示的二进制基数。我想您不明白他试图解析的格式。你知道OP中链接的ITCH 4.1是一个二进制协议,并且不使用ASCII进行数字运算吗?欢呼的约翰,只是拿出一些添加消息,并对照过去的价格进行检查,似乎你是对的。现在我觉得有点傻,因为很明显它只是1000分。我想投这个票,但我可能还没有足够的代表权:/。@JohnZwinck:的确,我错了。谢谢你指出这一点。
200,000.0000
110000110101000000 00000000000000