Как преобразовать символ без знака в int с помощью python

#python #c #char #type-conversion #unsigned

Вопрос:

У меня есть следующий код на C

 #include lt;stdio.hgt;  int main () {   unsigned char mask = 0xAB;   for (int i = 0; i lt; 20; i  )  {  printf ("%d - %xn", mask, mask);  mask  = 9;  }   return 0; }  

Вывод в C

 171 - ab 180 - b4 189 - bd 198 - c6 207 - cf 216 - d8 225 - e1 234 - ea 243 - f3 252 - fc 5 - 5 14 - e 23 - 17 32 - 20 41 - 29 50 - 32 59 - 3b 68 - 44 77 - 4d 86 - 56  

Теперь в Python:

 mask = 0xab for i in range(20):  print("{0:d} - {0:x}".format(mask,mask))  mask = (mask   9) % 0xFF  

Вывод Python:

 171 - ab 180 - b4 189 - bd 198 - c6 207 - cf 216 - d8 225 - e1 234 - ea 243 - f3 252 - fc 6 - 6 15 - f 24 - 18 33 - 21 42 - 2a 51 - 33 60 - 3c 69 - 45 78 - 4e 87 - 57  

Как вы можете видеть, правильный вывод-это код C, но в python я пробовал различными способами использовать pack(), to_bytes (), но я не могу найти правильный результат, как я могу его исправить?

Заранее спасибо

Ответ №1:

Вы должны по модулю 256(шестнадцатеричный: 0x100 ). Это связано unsigned char с тем, что тип данных C варьируется от 0 до 255 .

gt;gt;gt;gt;gt;gt; маска = 0xab gt;gt;gt;gt;gt;gt; для i в диапазоне(20): ... печать("{0:d} - {0:x}".формат(маска,маска)) ... маска = (маска   9) % gt;gt;gt;0x100 ...

Это приведет к тому же результату, что и ваш код на C!.

 171 - ab 180 - b4 189 - bd 198 - c6 207 - cf 216 - d8 225 - e1 234 - ea 243 - f3 252 - fc 5 - 5 14 - e 23 - 17 32 - 20 41 - 29 50 - 32 59 - 3b 68 - 44 77 - 4d 86 - 56