2016-03-09 2 views
0
def convert_output (output): 
    return (struct.pack('i', output)) 

while True: 
    pygame.event.pump() 
    joystick = pygame.joystick.Joystick(0) 
    joystick.init() 

    X_AX = int(joystick.get_axis(0) * 100) 

    DATA = convert_output(X_AX) 

    print("message:", (DATA), "----", hex(X_AX), "----", X_AX) 

Comment obtenir la même sortie dans DATA que hexadécimal (X_AX)? J'ai besoin de X_AX comme octet HEX pour la communication UDP.Python3 Convertir un INT en HEX

Sortie courant ressemble:

message: b'\x00\x00\x00\x00' ---- 0x0 ---- 0 
message: b'\x18\x00\x00\x00' ---- 0x18 ---- 24 

gamme de X_AX est -100 à 100

Répondre

1

Si vous voulez une seule représentation de l'octet, appelez struct.pack avec le code de format b au lieu de i, et il affichera un octet signé unique (qui peut représenter toutes les valeurs comprises entre -128 et 127 inclusivement, en gérant la plage de -100 à 100 requise). Le repr dudit octet dans le cas de l'exemple serait b'\x18' lorsque print -ed, mais lorsque vous write à un socket ou un fichier en mode binaire, l'octet brut lui-même serait écrit. Voir le struct module's format code documentation for other options by size.

+0

merci! sock.sendto ((DATA), (HOST, PORT)) enverra l'octet brut? – user3603948

+0

@ user3603948: Eh bien, vous pourriez omettre les parenthèses autour de 'DATA', mais oui,' sock.sendto (DATA, (hôte, port)) 'serait l'approche normale pour IPv4 (et IPv6 le supporte, bien que [le' socket' docs indique que vous devriez fournir 'flowinfo', et' scopeid' pour les adresses IPv6] (https://docs.python.org/3/library/socket.html#socket-families)). – ShadowRanger