반응형
파이썬에서 바이트 문자열을 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
반응형
'파이썬' 카테고리의 다른 글
파이썬 Python에서 확장자없이 파일 이름 가져 오기 (0) | 2020.10.19 |
---|---|
파이썬 인터프리터 오류, x는 인수를받지 않습니다 (주어진 1). (0) | 2020.10.19 |
파이썬 Python 3으로지도 객체를 인쇄하는 방법은 무엇입니까? (0) | 2020.10.19 |
파이썬 왜 "IndentationError : expected an indented block"이 발생합니까? (0) | 2020.10.18 |
파이썬 Python : 값에 대해 목록의 발생 확인 (0) | 2020.10.18 |
댓글