2011-05-06 10 views
17

Estoy usando Python para ejecutar algunas operaciones en ubicaciones específicas de la memoria (direcciones de 32 bits) en un sistema integrado.Python Trailing L Problema

Cuando estoy convirtiendo estas direcciones hacia y desde cadenas, enteros y valores hexadecimales parece que aparece un L final. Esto puede ser un verdadero dolor de cabeza, por ejemplo, el siguiente código aparentemente inofensivo no funcionará:

int(hex(4220963601)) 

O esto:

int('0xfb96cb11L',16) 

¿Alguien sabe cómo evitar esto?

Hasta ahora hemos llegado con este método para pelar el arrastre L fuera de una cadena, pero no parece muy elegante:

if longNum[-1] == "L": 
    longNum = longNum[:-1] 
+2

Su primer ejemplo no funcionaría incluso sin la "L" porque 'int' no sabe cómo manejar el prefijo" 0x ". ¿Qué está tratando de lograr? – recursive

Respuesta

17

Si lo hace la conversión a hexadecimal utilizando

"%x" % 4220963601 

no habrá ni la 0x ni el L de salida.

+4

alternativamente' formato (4220963601, 'x') ' – jamylak

11

Calling str() en esos valores deben omitir el terminador ' L '.

+8

Solo para que los futuros lectores sepan, la respuesta de Yan de llamar a 'str' no funciona, al menos en Python 2.7.3. Str mantiene la 'L' final. (No tengo suficiente reputación para comentar la respuesta de Yan) Las respuestas con formato o% x parecen funcionar. – Rhadamanthos

+1

espaciado entrecortado, pero: Python 2.7.5+ (predeterminado, 19 de septiembre de 2013, 13:48:49) [GCC 4.8.1] en linux2 Escriba "ayuda", "derechos de autor", "créditos" o " licencia "para obtener más información. >>> n = 123L >>> str (n) '123' >>> str (123L) '123' – yan

+0

Ese ejemplo es cierto en general, pero para hex, hex no acepta cadenas devuelve una cadena con L dado un número entero: '( – Har

-1

esto podría ayudar a alguien:

>>>n=0xaefa5ba7b32881bf7d18d18e17d3961097548d7cL 
>>>print "n=","%0s"%format(n,'x').upper() 
n= AEFA5BA7B32881BF7D18D18E17D3961097548D7C 
+3

¿cómo ayudaría esta pieza de código sin comentarios a más personas que las respuestas dadas? – kratenko

0

Esto es lo que hice: int (variable_which_is_printing_as_123L) y funcionó para mí. Esto funcionará para enteros normales.