我遇到了Hex值和python的问题。我正在尝试编写一个执行字节XOR并返回Hex值的函数。
基本上我试图将这个C#代码转换为Python:
private byte[] AddParity(string _in)
{
byte parity = 0x7f;
List<byte> _out = new List<byte>();
ASCIIEncoding asc = new ASCIIEncoding();
byte[] bytes = asc.GetBytes(_in + '\r');
foreach (byte bt in bytes)
{
parity ^= bt;
_out.Add(bt);
}
_out.Add(parity);
return _out.ToArray();
}
有人能指出我正确的方向吗?
答案 0 :(得分:1)
parity = 0x7f
parities = [int(item,16) ^ parity for item in "4e 7f 2b".split()]
#or maybe
parities = [ord(item) ^ parity for item in "somestring"]
我猜你用它作为某种校验和
parity = 0x7f
bits = []
for bit in "somestring":
parity ^= ord(bit)
parity &= 0xFF #ensure width
bits.append(bit)
bits.append(parity)
你可以做更多的pythonically来做校验和
这是您想要的答案
bytestring = "vTest\r"
bits = chr(0x7f) + bytestring
checksum = reduce(lambda x,y:chr((ord(x)^ord(y))&0xff),bits)
message = bytestring+checksum
print map(lambda x:hex(ord(x)),message)
#Result:['0x76', '0x54', '0x65', '0x73', '0x74', '0xd', '0x32']
# ser.write(message)
如果要查看十六进制值
print map(hex,parities)
或查看二进制文件
print map(bin,parities)