2009-03-27 13 views
5

Ci scusiamo per la domanda Python noob ma sono rimasto bloccato per troppo tempo.Gestione output di socket python recv

Sto usando i socket python per ricevere alcuni dati da un server. Faccio questo:


data = self.socket.recv(4) 
print "data is ", data 
print "repr(data) is ", repr(data) 

L'uscita sulla console è questo:

dati è
repr (dati) è '\ x00 \ x00 \ x00 \ x01'

Voglio trasformare questa stringa contenente essenzialmente un numero di 4 byte in un int - o in realtà ciò che sarebbe un lungo in C. Come posso trasformare questo oggetto dati in un valore numerico che posso facilmente gestire?

risposta

10

Probabilmente si desidera utilizzare struct.

Il codice dovrebbe essere simile:

import struct 

data = self.socket.recv(4) 
print "data is ", data 
print "repr(data) is ", repr(data) 
myint = struct.unpack("!i", data)[0] 
+0

Grazie. In realtà dovevo fare "myint = unpack ("! I ", data) [0]" dato che è big-endian e viene fuori come una tupla. Se vuoi modificare, segnerò la tua risposta corretta. Ancora una volta, grazie per l'aiuto. – chrism1

+0

Manca la parte della tupla. :) Modificato la risposta secondo la tua richiesta. – grieve

+0

Solo per essere pedante, credo che l'ultima riga dovrebbe essere anche: myint = struct.unpack ("! I", data) [0] –