Python对十六进制和字符串进行XOR(奇偶校验函数)

-2 投票
1 回答
1865 浏览
提问于 2025-04-18 04:36

我在使用十六进制值和Python时遇到了一些问题。我想写一个函数,能够逐字节进行异或运算,并返回一个十六进制值。

简单来说,我想把这段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();
}

有人能给我一些建议吗?

1 个回答

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)

如果想用更符合Python风格的方式来做校验和,你可以这样做


这就是你想要的答案

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)

撰写回答