Convertir entero en una cadena hexadecimal con formato específico

Soy nuevo en Python y tengo el siguiente problema: necesito convertir un entero en una cadena hexadecimal de 6 bytes.

por ejemplo, 281473900746245 -> “\ xFF \ xFF \ xBF \ xDE \ x16 \ x05”

El formato de la cadena hexadecimal es importante. La longitud del valor int es variable.

El formato ‘0xffffbf949309L’ no funciona para mí. (Obtengo esto con hex (valor int))


Mi solución final (después de algunos “jugar”) es:

def _tohex(self, int_value): data_ = format(int_value, 'x') result = data_.rjust(12, '0') hexed = unhexlify(result) return hexed 

¡Gracias por toda la ayuda!

Puede haber una mejor solución, pero puedes hacer esto:

 x = 281473900746245 decoded_x = hex(x)[2:].decode('hex') # value: '\xff\xff\xbf\xde\x16\x05' 

Descompostura:

 hex(x) # value: '0xffffbfde1605' hex(x)[2:] # value: 'ffffbfde1605' hex(x)[2:].decode('hex') # value: '\xff\xff\xbf\xde\x16\x05' 

Actualizar:

Por @multipleinstances y @ Sven comentarios, ya que podría estar tratando con valores largos, podría tener que ajustar un poco la salida de hex:

 format(x, 'x') # value: 'ffffbfde1605' 

A veces, sin embargo, la salida de hex puede tener una longitud impar, lo que rompería la deencoding, por lo que probablemente sería mejor crear una función para hacer esto:

 def convert(int_value): encoded = format(int_value, 'x') length = len(encoded) encoded = encoded.zfill(length+length%2) return encoded.decode('hex') 

En Python 3.2 o superior, puedes usar el método to_bytes() del interger.

 >>> i = 281473900746245 >>> i.to_bytes((i.bit_length() + 7) // 8, "big") b'\xff\xff\xbf\xde\x16\x05' 

Si no usa Python 3.2 (estoy bastante seguro de que no lo hace), considere el siguiente enfoque:

 >>> i = 281473900746245 >>> hex_repr = [] >>> while i: ... hex_repr.append(struct.pack('B', i & 255)) ... i >>= 8 ... >>> ''.join(reversed(hex_repr)) '\xff\xff\xbf\xde\x16\x05'