urllib2请求接收如下的二进制响应:
00 00 00 01 00 04 41 4D 54 44 00 00 00 00 02 41
97 33 33 41 99 5C 29 41 90 3D 71 41 91 D7 0A 47
0F C6 14 00 00 01 16 6A E0 68 80 41 93 B4 05 41
97 1E B8 41 90 7A E1 41 96 8F 57 46 E6 2E 80 00
00 01 16 7A 53 7C 80 FF FF
其结构为:
DATA, TYPE, DESCRIPTION
00 00 00 01, 4 bytes, Symbol Count =1
00 04, 2 bytes, Symbol Length = 4
41 4D 54 44, 6 bytes, Symbol = AMTD
00, 1 byte, Error code = 0 (OK)
00 00 00 02, 4 bytes, Bar Count = 2
FIRST BAR
41 97 33 33, 4 bytes, Close = 18.90
41 99 5C 29, 4 bytes, High = 19.17
41 90 3D 71, 4 bytes, Low = 18.03
41 91 D7 0A, 4 bytes, Open = 18.23
47 0F C6 14, 4 bytes, Volume = 3,680,608
00 00 01 16 6A E0 68 80, 8 bytes, Timestamp = November 23,2007
SECOND BAR
41 93 B4 05, 4 bytes, Close = 18.4629
41 97 1E B8, 4 bytes, High = 18.89
41 90 7A E1, 4 bytes, Low = 18.06
41 96 8F 57, 4 bytes, Open = 18.82
46 E6 2E 80, 4 bytes, Volume = 2,946,325
00 00 01 16 7A 53 7C 80, 8 bytes, Timestamp = November 26,2007
TERMINATOR
FF FF, 2 bytes,
如何读取这样的二进制数据?
提前谢谢。
我在前6个字节上尝试了struct module,代码如下:
struct.unpack('ih', response.read(6))
(167772161024)
但它应该输出(1,4)。我看了一下手册,但不知道出了什么问题。
所以这是我解释你提供的数据的最好机会…:
它发出:
…这似乎很接近你想要的,除了一些输出格式的细节。希望这有帮助!-)
你正在一台小型的endian机器上解压big-endian数据。请改为:
这告诉unpack按网络顺序考虑数据(big endian)。此外,计数和长度的值不能为负,因此应在格式字符串中使用无符号变量。
相关问题 更多 >
编程相关推荐