Obtener nth byte de entero

Tengo el siguiente entero:

target = 0xd386d209 print hex(target) 

¿Cómo puedo imprimir el n º byte de este entero? Por ejemplo, la salida esperada para el primer byte sería:

 0x09 

Puedes hacer esto con la ayuda de la manipulación de bits. Cree una máscara de bits para un byte completo, luego modifique la cantidad de bytes que desee. Enmascara el byte utilizando el binario AND y, por último, cambia el resultado a la primera posición:

 target = 0xd386d209 n = 0 # 0th byte goal = 0xFF << (8 * n) print hex((target & goal) >> (8 * n)) 

Puede simplificarlo un poco cambiando el número de entrada primero. Entonces no necesitas cambiar el valor del goal en absoluto:

 target = 0xd386d209 n = 0 # 0th byte goal = 0xFF print hex((target >> (8 * n)) & goal) 
 >>> def print_n_byte(target, n): ... return hex((target&(0xFF<<(8*n)))>>(8*n)) ... >>> print_n_byte(0xd386d209, 0) '0x9L' >>> print_n_byte(0xd386d209, 1) '0xd2L' >>> print_n_byte(0xd386d209, 2) '0x86L' 

Esto solo implica una simple operación binaria.

 >>> target = 0xd386d209 >>> b = 1 >>> hex((target & (0xff << b * 8)) >> b * 8) '0x9' >>> hex((target & (0xff << b * 8)) >> b * 8) '0xd2' 
 def byte(number, i): return (number & (0xff << (i * 8))) >> (i * 8)