#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