在python中进行无符号字符算术

时间:2015-10-18 21:08:36

标签: python

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;
 }

3 个答案:

答案 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