【问题标题】:How to convert unsigned char to int with python如何使用 python 将 unsigned char 转换为 int
【发布时间】:2021-12-20 05:30:49
【问题描述】:

我在 C 中有以下代码

#include <stdio.h>

int main ()
{

  unsigned char mask = 0xAB;

  for (int i = 0; i < 20; i++)
    {
      printf ("%d - %x\n", 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() 但我找不到正确的结果,我该如何纠正它?

提前致谢

【问题讨论】:

    标签: python c char type-conversion unsigned


    【解决方案1】:

    您应该以 256 为模(十六进制:0x100)。这是因为 C unsigned char 数据类型范围从 0255

    >>> 掩码 = 0xab >>> for i in range(20): ... print("{0:d} - {0:x}".format(mask,mask)) ...掩码 = (掩码 + 9) % 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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-12-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-04
      • 2012-04-28
      相关资源
      最近更新 更多