【发布时间】:2018-01-29 18:47:21
【问题描述】:
在我的网络课程中,我的一个实验室是让一个客户端以大端顺序接收 5 个熟悉的 32 位整数并对其进行节制。我决定使用 python,一切正常,但我收到了奇怪的十六进制代码。
\x00\x00\x00o\x00\x00\x00\xe4\x00\x00\x01\xb3\x00\x00\x01\xdb\x00\x00\x01\xec
我可以轻松转换其中的大部分,但 x00o 真的让我感到困惑,228 435 475 492 我相信之后的 4。你能帮我处理服务器消息吗?
import socket
import sys
try:
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
except socket.error:
print('Failed to create socket')
sys.exit()
print('Socket Created')
host = 'localhost'
port = 5071
try:
remote_ip = socket.gethostbyname(host)
except socket.gaierror:
#could not resolve
print('Hostname could not be resolved. Exiting')
sys.exit()
s.connect((remote_ip , port))
print('Socket Connected to ' + host + ' on ip ' + remote_ip)
reply = s.recv(4096)
print(reply)
【问题讨论】:
-
如果缓冲区中的一个字节的值对应于一个可打印的字符,Python 在将缓冲区打印为字符串时将其显示为该字符。如果该值与可打印字符不匹配,Python 会将字节显示为
\x前缀后的两个十六进制数字。因此,您的\x00o表示一个值为 0 的字节,后跟一个值为字符 'o' 的值的字节。该字节的数值为ord('o'),即十进制111,十六进制6f。
标签: python sockets networking binary hex