2009-03-27 16 views
5

Disculpas por la pregunta de noob Python pero he estado atascado en esto por demasiado tiempo.Manejo de la salida del socket de python recv

Estoy usando sockets de python para recibir algunos datos de un servidor. Hago esto:


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

La salida de la consola es la siguiente:

de datos es
repr (datos) se '\ x00 \ x00 \ x00 \ x01'

Quiero convertir esta cadena que contiene esencialmente un número de 4 bytes en un int, o en realidad lo que sería un largo en C. ¿Cómo puedo convertir este objeto de datos en un valor numérico que puedo administrar fácilmente?

Respuesta

10

Probablemente desee utilizar struct.

El código sería algo como:

import struct 

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

Gracias. De hecho tuve que hacer "myint = unpack ("! I ", data) [0]" ya que es big-endian y sale como una tupla. Si quiere editar marcaré su respuesta correcta. De nuevo, gracias por la ayuda. – chrism1

+0

Se perdió la parte de tupla. :) Editó la respuesta según su solicitud. – grieve

+0

Para ser pedantes, creo que la última línea también debería ser: myint = struct.unpack ("! I", data) [0] –

Cuestiones relacionadas