Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在python中执行无符号字符算法_Python - Fatal编程技术网

在python中执行无符号字符算法

在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

再见, 我需要在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;
 }
无符号字符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
为空字节)。