Python 2.7中如何将字符串转换为十六进制值FF(0xFF)
我明白你现在的困扰啦,你当前的代码问题出在对字符串转字节的逻辑理解上:你把字符串'OxFF'当成了十六进制值的标识,但bytearray(data)实际上是把字符串里的每个字符('O'、'x'、'F'、'F')转换成了对应的ASCII字节,所以binascii.hexlify后得到的4f784646其实是这些字符的ASCII编码,完全不是你要的0xFF字节。
针对你需要的Twisted TCP消息头FF FF,给你两个简单的解决方案:
方案1:直接构造目标字节数组
这是最直接的方式,不需要从字符串转换,直接创建包含两个0xFF的字节数组:
import binascii # 创建包含两个0xFF字节的bytearray header = bytearray([0xFF, 0xFF]) # 验证结果,输出应该是'ffff' print(binascii.hexlify(header))
这个header就是你需要的消息头,直接传给Twisted的发送方法即可。
方案2:从十六进制字符串解析(如果需要从字符串生成)
如果你确实需要从类似'FF'的字符串生成字节,可以用binascii.unhexlify来处理:
import binascii # 生成两个FF的消息头 header = binascii.unhexlify('FFFF') print(binascii.hexlify(header)) # 输出'ffff'
如果你的输入是带Ox前缀的'OxFF',先去掉前缀再处理就行:
hex_str = 'OxFF'.replace('Ox', '') header = binascii.unhexlify(hex_str * 2) # 乘以2得到两个FF字节
用上面的方法得到的字节数组,直接在Twisted里发送就可以满足消息头的需求啦。
内容的提问来源于stack exchange,提问作者Mike Bailey
相关产品推荐
相关产品推荐

