我正在尝试将我的代码转换为python3,我在使用problem时遇到了一个关于Struct的问题。当我在解包时不使用变量时,它会给出我想要的结果,但是当我使用变量时,它并没有给我它需要的结果。在
我使用名为“dataReceived”的def从套接字获取数据。我用struct解包。在
不带变量的代码(给出真实结果)(结果为2)(数据包与我从socket获得的数据包相同):
packetFormat = unpack('!b', b'\x02\x01]\x00\x1c\x01\x01\xb0\x00\taMtIyfKal\x00\x07ActiveX\x00\x165.0 (Windows)-Netscape\x00)\xed\x06\x00\x00\x00@3407d2fbeefadbf85fa0f48bbac8337e026e0669b6be226156fd6fb4d575ef16\x00\xd9A=t&SA=t&SV=t&EV=t&MP3=t&AE=t&VE=t&ACC=t&PR=t&SP=f&SB=f&DEB=f&V=WIN 28,0,0,137&M=Adobe Windows&R=1280x1024&COL=color&AR=1.0&OS=Windows 8&ARCH=x86&L=tr&IME=t&PR32=t&PR64=t&PT=ActiveX&AVD=f&LFD=f&WD=f&TLS=t&ML=5.1&DP=72\x00\x00\x00\x00\x00\x00\x02\xca\x00\x00'[:1])[0]
print(packetFormat)
带变量的代码(从def dataReceived获取数据包)(结果为假)(结果为98)(两个数据包相同)
^{pr2}$
对接收到的字节值调用
str
并不像您认为的那样。在这是一种古老的、良好的行为:
在新代码中,
^{pr2}$bytes
值被转换为字符串:然后打开包装:
字符串值似乎有点奇怪:
对
bytes
值调用str
会给我们一个字符串bytes
'repr
;要将bytes
作为字符串,我们需要调用bytes
值的decode
方法。请注意,您的数据包数据似乎编码为拉丁语1,而不是utf-8。对于第一个字节来说,这并不重要,但是如果您想解码整个bytestring,这就有关系了。在因此,不要对您解包的
bytes
值调用str
,要么对其进行解码,要么将其保留为bytes
并避免不必要的编码和解码。不过,您可以将字节解码为unicode字符串并将其存储在实例中。在相关问题 更多 >
编程相关推荐