Estoy revisando un código que utiliza la biblioteca cytypes y veo algunas cosas nuevas:

print("some_num : %04x" % [a c_uint32 number]) # [] used as placeholder
print("another  : %01x" % [a c_uint8 number])
print("another1 : %02x" % [a c_uint16 number])

Puedo decir que hay una relación con la notación de formato usando % y el número ctype, pero no estoy seguro de cuál es. ¡Cualquier ayuda / sugerencia a algunas referencias será muy apreciada!

0
Joe 13 nov. 2017 a las 17:11

2 respuestas

La mejor respuesta
  • Un c_uint8 usa 1 byte (= 8 bits).
  • Un c_uint16 usa 2 bytes (= 16 bits).
  • Un c_uint32 usa 4 bytes (= 32 bits).

2 dígitos hexadecimales definen un byte. Significa el número antes de x debe ser una cuarta parte del número después de c_uint. De esta forma, todos los números hexadecimales tendrán la misma longitud.

print("another  : %02x" % [a c_uint8 number])
print("another1 : %04x" % [a c_uint16 number])
print("some_num : %08x" % [a c_uint32 number])

Aquí hay una pequeña prueba:

>>> from numpy import iinfo, uint8, uint16, uint32
>>> iinfo(uint8).max
255
>>> '1 byte : %02x' % 0
'1 byte : 00'
>>> '1 byte : %02x' % iinfo(uint8).max
'1 byte : ff'
>>> '2 bytes : %04x' % 0
'2 bytes : 0000'
>>> '2 bytes : %04x' % iinfo(uint16).max
'2 bytes : ffff'
>>> '4 bytes : %08x' % 0
'4 bytes : 00000000'
>>> '4 bytes : %08x' % iinfo(uint32).max
'4 bytes : ffffffff'
1
Eric Duminil 13 nov. 2017 a las 14:22

Para imprimir una variable c_uint 'var1', debe hacer esto: -

printf('the value of variable is %d', var1)
0
Abhijeetk431 13 nov. 2017 a las 14:17