簡體   English   中英

在Python中執行無符號字符算術

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM