[英]doing unsigned char arithmetic in python
早安,我需要在Python中移植以下C代碼,但是我找不到找到忽略python中溢出位的無符號char算法的好方法。 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;
}
您可以使用% 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)
您還可以使用按位與,這可能會更清楚。 我也喜歡十六進制表示法。
255 & 0xff
256 & 0xff
257 & 0xff
-1 & 0xff
在Python中,沒有簽名/未簽名的概念。 如果要處理溢出,則可以簡單地使用模塊化算法。
(255 + 1) % 256 = 0
(250 + 2) % 256 = 252
(255 + 5) % 256 = 4
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.