2017-01-25 3 views
1

예를 들어 '01ff6fee32785e366f710df10cc542B4'의 16 진수 문자열이 있고 [효율적으로] 1,255, ...와 같이 2 문자로 int 배열 2 개로 변환하려고합니다. 16 진수 str을 int 배열로 변환하는 방법

나는
c = '8db6796fee32785e366f710df10cc542B4' 
c2=[int(x,16) for x in c] 

을 시도했지만 그것은 단지 문자를 하나씩합니다. for 루프를 사용하지 않고도이 작업을 수행 할 수 있습니까 (틀릴 수도 있지만 속도가 느릴 것이라고 생각하는 경우)?

+0

전체 16 진수입니까? –

+0

예 32 자 길이입니다. – Grimsovitch

+1

첫 번째 예인 '01ff6fee32785e366f710df10cc'는 27 자입니다. – cdarke

답변

2

당신 길이 2의 문자열으로 초과 range(..) 수 :

c = '8db6796fee32785e366f710df10cc' 
c2=[int(c[i:i+2],16) for i in range(0,len(c),2)] 

그래서 i 2 단계와 문자열의 반복하고 c[i:i+2]i+2 (독점)에 i에서 길이 2의 문자열을. 이들은 int(..,16)을 복용하여 변환합니다.

는 샘플 입력의 경우는 생성

>>> c='8db6796fee32785e366f710df10cc' 
>>> [int(c[i:i+2],16) for i in range(0,len(c),2)] 
[141, 182, 121, 111, 238, 50, 120, 94, 54, 111, 113, 13, 241, 12, 12] 

하여 문자열의 길이가 홀수이기 때문에 마지막 요소 12이므로 파싱 마지막 요소로서 c 걸린다.

+0

그게 잘 작동하는 것, 감사합니다! – Grimsovitch

0
>>> c = '8db6796fee32785e366f710df10c' 
>>> [int(x) for x in bytearray.fromhex(c)] 
[141, 182, 121, 111, 238, 50, 120, 94, 54, 111, 113, 13, 241, 12] 
>>> list(map(int, bytearray.fromhex(c))) 
[141, 182, 121, 111, 238, 50, 120, 94, 54, 111, 113, 13, 241, 12] 

비교적 간단한 두 가지 솔루션이 있지만 문자열에 홀수 문자가 있거나 원하지 않을 수도 있습니다.