2012-11-23 3 views
0

16 진수 값으로 인쇄하려는 4 바이트 값을 소켓에서 수신합니다. 나는 노력하고있다 :Python에서 Str to hex

print "%08x" % (nonce) 

그러나 문자열이 16 진수로 변환 될 수 없다는 오류 메시지가 표시된다. 누구나 아이디어 어떻게 이것을 신속하게 해결할 수 있습니까?

+2

'넌센스'에는 어떤 가치가 있습니까? – Tim

답변

3

struct 모듈을 사용하면 네트워크에서 수신 한 옥텟을 실제 번호로 풀 수 있습니다. %08x 형식은 숫자에 적용됩니다.

import struct 
n, = struct.unpack('>I', nonce) 
print "%08x" % n 
0

대부분의 경우 바이트가 포함 된 문자열이 있습니다. 그러나 숫자로 인쇄하려면 잘해야합니다. 숫자.

당신은 쉽게 당신이 찾고있는 16 진수 문자열을 만들 수있는이 같은 :

''.join('%02x' % ord(x) for x in nonce) 

데모 :

>>> nonce = os.urandom(4) 
>>> nonce 
'X\x19e\x07' 
>>> ''.join('%02x' % ord(x) for x in nonce) 
'58196507' 
0

또 다른 옵션은 다음과 같습니다

from binascii import hexlify 
>>> hexlify('a1n4') 
'61316e34' 
0
num = "9999" 
print hex(int(num)) 
#0x270f 
+0

'나는 내 소켓에서 4 바이트 값을받습니다. '-이 코드에는 사용할 수있는 ASCII 숫자 만 포함되어있을 것 같지 않습니다. –

0

경우 데이터를 문자열로 변환 할 수 있습니다. 그는 str.encode() 방법 :

>>> s = "XYZ" 
>>> s.encode('hex') 
'58595a'