将字符串转换为字节会在控制台中显示奇怪的十六进制代码

时间:2018-09-30 13:56:21

标签: python c++ networking udp

我的问题简介:

我正在尝试编写一个使用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个不同的数据包发送):

Image here

让我感到困惑的是,我希望十六进制代码仅包含十六进制符号,但是即使实际打印的文本看起来还不错,那里也有一些看似随机的符号/字母。有人可以向我解释这些符号来自何处,因为我不确定我应该如何在我的C ++代码中解释这些信息。

2 个答案:

答案 0 :(得分:0)

Python尝试通过打印与ASCII符号相对应的字节作为ASCII符号来帮助您(实际上是否有帮助)。

def extract_id(header):
    return header.split('|')[1]

sequences = Fasta('uniprot_sprot.fasta', key_function=extract_id)
print(sequences['P04637'])

答案 1 :(得分:0)

您的脚本不会打印纯十六进制,但会显示已解释的十六进制字符串。您的某些十六进制字符可以用ASCII解释和显示,而其他则不能。我在解释器中测试了字符串替换,您会看到相同的结果:

>>> "%s".encode() % b"\xfa\x3f\x00"
b'\xfa?\x00'

其中\x3f?的ASCII十六进制代码。