Goodday, 我需要在Python中移植以下C代码,但我找不到一个很好的方法来执行无符号字符算法,忽略python中的溢出位,即。 255 + 1 = 0; 255 + 2 = 1等 下面的代码用于校验和计算,该协议在我需要与之交互的Arduino上的C中实现。
unsigned char b[length];
unsigned char c1=0,c2=0,c3=0,c4=0;
for (i=0; i<length;i++)
{
c1+=b[i];
c2+=c1;
c3+=c2;
c4+=c3;
}
答案 0 :(得分:3)
您可以使用% 256
:
>>> (255 + 1) % 256
0
>>> (255 + 2) % 256
1
使用您的示例,如果b
是Python字符串:
>>> b = "thisisatest"
>>> c1, c2, c3, c4 = 0, 0, 0, 0
>>> for c in b:
... c1 = (c1 + ord(c)) % 256
... c2 = (c2 + c1) % 256
... c3 = (c3 + c2) % 256
... c4 = (c4 + c3) % 256
...
>>> c1, c2, c3, c4
... (181, 36, 46, 174)
答案 1 :(得分:1)
您也可以使用按位AND,这可能更清晰。我也喜欢hex符号。
255 & 0xff
256 & 0xff
257 & 0xff
-1 & 0xff
答案 2 :(得分:0)
在Python中没有签名/未签名的概念。如果你想处理溢出,你可以简单地使用模运算。
(255 + 1) % 256 = 0
(250 + 2) % 256 = 252
(255 + 5) % 256 = 4