将字符串转换为字节会在控制台中打印出奇怪的十六进制代码
Converting string to bytes prints weird-looking hex-code in console
介绍我的问题:
我正在尝试编写一个使用 WinSock2 通过 UDP 接收数据的 C++ 程序。
为此,我有一个预先编写的 Python 脚本,可以将 10 字节的数据包发送到指定端口,然后 C++ 程序会在该端口接收它们。我已经让数据传输正常工作,但是我对正在发送的数据感到困惑。
我的问题:
我是 运行 来自 cmd 的 Python 脚本,它在控制台上打印发送的文本。我还在脚本中添加了一行,将字符串转换为字节以验证发送的到底是什么。第一行是我加的,相当简单:
logger.debug("Sending packet len %s, data %s", sizeof(packet), bytes(packet))
logger.debug("Sending packet len %s, data %s", sizeof(packet), packet)
这是我终端的输出(发送了 3 个不同的数据包):
让我感到困惑的是,我希望十六进制代码只包含十六进制符号,但那里也有一些看似随机的 symbols/letters,即使实际打印的文本看起来还不错。有人可以向我解释一下,这些符号是从哪里来的,因为我不确定我应该如何在我的 C++ 代码中解释接收端的这些信息。
Python 试图通过将对应于 ASCII 符号的字节打印为 ASCII 符号来提供帮助(是否真的有帮助还有待商榷)。
>>> t1 = b'test'
>>> t2 = b'\x74\x65\x73\x74'
>>> t1 == t2
True
>>> print(t1, t2)
b'test' b'test'
您的脚本不打印纯十六进制,而是打印经过解释的十六进制字符串。您的某些十六进制字符可以用 ASCII 解释和显示,而其他字符则不能。我在我的解释器中测试了字符串替换,你看到了相同的结果:
>>> "%s".encode() % b"\xfa\x3f\x00"
b'\xfa?\x00'
其中 \x3f
是 ?
的 ASCII 十六进制代码。
介绍我的问题:
我正在尝试编写一个使用 WinSock2 通过 UDP 接收数据的 C++ 程序。 为此,我有一个预先编写的 Python 脚本,可以将 10 字节的数据包发送到指定端口,然后 C++ 程序会在该端口接收它们。我已经让数据传输正常工作,但是我对正在发送的数据感到困惑。
我的问题: 我是 运行 来自 cmd 的 Python 脚本,它在控制台上打印发送的文本。我还在脚本中添加了一行,将字符串转换为字节以验证发送的到底是什么。第一行是我加的,相当简单:
logger.debug("Sending packet len %s, data %s", sizeof(packet), bytes(packet))
logger.debug("Sending packet len %s, data %s", sizeof(packet), packet)
这是我终端的输出(发送了 3 个不同的数据包):
让我感到困惑的是,我希望十六进制代码只包含十六进制符号,但那里也有一些看似随机的 symbols/letters,即使实际打印的文本看起来还不错。有人可以向我解释一下,这些符号是从哪里来的,因为我不确定我应该如何在我的 C++ 代码中解释接收端的这些信息。
Python 试图通过将对应于 ASCII 符号的字节打印为 ASCII 符号来提供帮助(是否真的有帮助还有待商榷)。
>>> t1 = b'test'
>>> t2 = b'\x74\x65\x73\x74'
>>> t1 == t2
True
>>> print(t1, t2)
b'test' b'test'
您的脚本不打印纯十六进制,而是打印经过解释的十六进制字符串。您的某些十六进制字符可以用 ASCII 解释和显示,而其他字符则不能。我在我的解释器中测试了字符串替换,你看到了相同的结果:
>>> "%s".encode() % b"\xfa\x3f\x00"
b'\xfa?\x00'
其中 \x3f
是 ?
的 ASCII 十六进制代码。