본문 바로가기
파이썬

파이썬 바이트 문자열을 정수로 변환하는 방법은 무엇입니까?

by º기록 2020. 10. 19.
반응형

파이썬에서 바이트 문자열을 int로 어떻게 변환 할 수 있습니까?

다음과 같이 말하세요. 'y \ xcc \ xa6 \ xbb'

나는 그것을하는 영리하고 어리석은 방법을 생각해 냈습니다.

sum(ord(c) << (i * 8) for i, c in enumerate('y\xcc\xa6\xbb'[::-1]))

나는 이것을 더 간단하게 수행하는 내장 또는 표준 라이브러리에 무언가가 있어야한다는 것을 알고 있습니다 ...


최신 정보:

나는 다른 모듈을 가져올 필요가 없기 때문에 James의 대답을 조금 더 좋아하지만 Greg의 방법이 더 빠릅니다.

>>> from timeit import Timer
>>> Timer('struct.unpack("<L", "y\xcc\xa6\xbb")[0]', 'import struct').timeit()
0.36242198944091797
>>> Timer("int('y\xcc\xa6\xbb'.encode('hex'), 16)").timeit()
1.1432669162750244

내 해키 방법 :

>>> Timer("sum(ord(c) << (i * 8) for i, c in enumerate('y\xcc\xa6\xbb'[::-1]))").timeit()
2.8819329738616943

추가 업데이트 :

누군가 다른 모듈을 가져 오는 데 문제가 무엇인지 의견을 물었습니다. 글쎄요, 모듈을 가져 오는 것이 반드시 저렴하지는 않습니다.

>>> Timer("""import struct\nstruct.unpack(">L", "y\xcc\xa6\xbb")[0]""").timeit()
0.98822188377380371

모듈 가져 오기 비용을 포함하면이 방법이 갖는 거의 모든 이점이 무효화됩니다. 여기에는 전체 벤치 마크 실행에 대해 한 번만 가져 오는 비용이 포함됩니다. 매번 강제로 다시로드하면 어떻게되는지보세요.

>>> Timer("""reload(struct)\nstruct.unpack(">L", "y\xcc\xa6\xbb")[0]""", 'import struct').timeit()
68.474128007888794

말할 필요도없이, 한 번의 가져 오기에 대해이 메서드를 많이 실행하는 경우 이보다 비례 적으로 문제가 줄어 듭니다. 또한 CPU가 아닌 I / O 비용 일 수 있으므로 특정 시스템의 용량 및 부하 특성에 따라 달라질 수 있습니다.

 

해결 방법

 


>>> struct.unpack("<L", "y\xcc\xa6\xbb")[0]
3148270713L

 

참조 페이지 https://stackoverflow.com/questions/444591

 

 

반응형

댓글