Python 2.7编写DNS查询时,如何将socket.recv返回字节转为int数组?
在Python 2.7中将socket返回的字符串转为int数组的方法
嘿,我来帮你搞定这个问题!在Python 2.7里处理socket.recv返回的字符串转int数组其实超简单——因为Python2里的str本身就是字节序列,每个字符对应一个原始字节的值,咱们只需要把每个字符转成对应的整数就行。
核心实现方法
直接用列表推导式结合ord()函数就能完成转换,代码示例如下:
import socket # 假设你已经完成socket初始化、发送DNS查询的步骤 dns_response = sock.recv(512) # 这里得到的是字符串形式的字节数据 int_array = [ord(char) for char in dns_response]
原理说明
ord(char)函数会把每个字符(也就是单个字节)转换成对应的十进制整数,比如字节\x05会被转成5,\xff会被转成255,完全对应C#里把byte数组转为int数组的效果。- 举个实际例子:如果socket返回的是
'\x00\x01\x0f\x2a',转换后的int_array就是[0, 1, 15, 42],和C#处理后的结果完全一致。
额外小贴士
如果之后要解析DNS报文的具体字段(比如取标识位、查询类型这些),用ord()得到的整数可以直接做位运算,比如(int_array[2] << 8) | int_array[3]就能把两个字节拼成一个16位整数,完全适配DNS报文的二进制格式要求。
内容的提问来源于stack exchange,提问作者Christian
相关产品推荐
相关产品推荐

