在python中执行无符号字符算法
再见, 我需要在Python中移植下面的C代码,但我找不到一个好方法来执行忽略Python中溢出位的无符号字符算法,即255+1=0;255+2=1等。 下面的代码用于协议的校验和计算,该协议在我需要与之接口的Arduino上用C实现在python中执行无符号字符算法,python,Python,再见, 我需要在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+=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;
}
无符号字符b[length];
无符号字符c1=0,c2=0,c3=0,c4=0;
对于(i=0;i您可以使用%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)
在Python中没有符号/无符号的概念。如果你想处理溢出,你可以简单地使用模运算
(255 + 1) % 256 = 0
(250 + 2) % 256 = 252
(255 + 5) % 256 = 4
您还可以使用位AND,这可能更清楚。我也喜欢十六进制表示法
255 & 0xff
256 & 0xff
257 & 0xff
-1 & 0xff
我对这一个进行了表决,但它应该是一个共享的答案;)我没有将此作为答案添加的唯一原因是,ord(c)的使用不好(IMHO),因为数据将是线路上原始的不可打印的数据位。这就是我使用unsigned char[]表示b的原因。我选择的答案是出于一般原因;)ord()
将处理“原始不可打印数据”:ord('\x00')==0
(\x00
为空字节)。