[PYTHON] 파이썬 int를 빅 엔디안 바이트 문자열로 변환하십시오.
PYTHON파이썬 int를 빅 엔디안 바이트 문자열로 변환하십시오.
나는 음수가 아닌 int가 있고 그것을 동일한 데이터를 포함하는 big-endian 문자열로 효율적으로 변환하려고합니다. 예를 들어, int 1245427 (0x1300F3)은 바이트 값이 0x13, 0x00 및 0xf3 인 세 문자를 포함하는 길이가 3 인 문자열이됩니다.
내 int는 35 (10 진수) 자릿수입니다.
어떻게해야합니까?
해결법
-
==============================
1.struct 모듈을 사용할 수 있습니다 :
struct 모듈을 사용할 수 있습니다 :
import struct print struct.pack('>I', your_int)
'> 나는 형식 문자열입니다. >는 빅 엔디안을 의미하며 unsigned int를 의미합니다. 다른 형식의 문자에 대해서는 설명서를 확인하십시오.
-
==============================
2.Python 3.2 이상에서는 int.to_bytes를 사용할 수 있습니다.
Python 3.2 이상에서는 int.to_bytes를 사용할 수 있습니다.
>>> n = 1245427 >>> n.to_bytes((n.bit_length() + 7) // 8, 'big') or b'\0' b'\x13\x00\xf3'
>>> (1245427).to_bytes(3, byteorder='big') b'\x13\x00\xf3'
-
==============================
3.이것은 빠르고 작고 (임의의) 큰 int에 대해 작동합니다.
이것은 빠르고 작고 (임의의) 큰 int에 대해 작동합니다.
def Dump(n): s = '%x' % n if len(s) & 1: s = '0' + s return s.decode('hex') print repr(Dump(1245427)) #: '\x13\x00\xf3'
-
==============================
4.아마도 가장 좋은 방법은 내장 된 struct 모듈을 사용하는 것입니다.
아마도 가장 좋은 방법은 내장 된 struct 모듈을 사용하는 것입니다.
>>> import struct >>> x = 1245427 >>> struct.pack('>BH', x >> 16, x & 0xFFFF) '\x13\x00\xf3' >>> struct.pack('>L', x)[1:] # could do it this way too '\x13\x00\xf3'
양자 택일로 - 그리고 나는 보통 이것을 추천하지 않는다. 실수하기 쉽기 때문이다. chr () 함수를 이동하여 "수동으로"할 수있다.
>>> x = 1245427 >>> chr((x >> 16) & 0xFF) + chr((x >> 8) & 0xFF) + chr(x & 0xFF) '\x13\x00\xf3'
호기심에서 왜 3 바이트 만 원합니까? 일반적으로 정수를 32 비트 (부호없는 long long)로 압축하고 struct.pack ( '> L', 1245427)을 사용하지만 [1 :] 단계는 건너 뜁니 까?
-
==============================
5.
def tost(i): result = [] while i: result.append(chr(i&0xFF)) i >>= 8 result.reverse() return ''.join(result)
-
==============================
6.@pts의 대답에 기반한 단일 소스 Python 2/3 호환 버전 :
@pts의 대답에 기반한 단일 소스 Python 2/3 호환 버전 :
#!/usr/bin/env python import binascii def int2bytes(i): hex_string = '%x' % i n = len(hex_string) return binascii.unhexlify(hex_string.zfill(n + (n & 1))) print(int2bytes(1245427)) # -> b'\x13\x00\xf3'
-
==============================
7.bitstring 모듈 사용 :
bitstring 모듈 사용 :
>>> bitstring.BitArray(uint=1245427, length=24).bytes '\x13\x00\xf3'
이 메소드의 경우, 작성중인 비트 스트링의 길이 (비트)를 지정해야합니다.
내부적으로 이것은 Alex의 대답과 거의 같지만 데이터로 더 많은 일을하려면 모듈에 많은 추가 기능이 있습니다.
-
==============================
8.가장 짧은 방법은 다음과 같습니다.
가장 짧은 방법은 다음과 같습니다.
import struct val = 0x11223344 val = struct.unpack("<I", struct.pack(">I", val))[0] print "%08x" % val
이것은 정수를 바이트 스왑 된 정수로 변환합니다.
from https://stackoverflow.com/questions/846038/convert-a-python-int-into-a-big-endian-string-of-bytes by cc-by-sa and MIT license
'PYTHON' 카테고리의 다른 글
[PYTHON] 파이썬 URLLib / URLLib2 POST (0) | 2018.10.07 |
---|---|
[PYTHON] Python 스크립트 내에서 Scrapy를 실행하는 방법 (0) | 2018.10.07 |
[PYTHON] 파이썬 시간 + 시간 상당 (0) | 2018.10.07 |
[PYTHON] 파이썬에서 스레드 내에서 호출 될 때 sys.exit ()가 종료되지 않는 이유는 무엇입니까? (0) | 2018.10.07 |
[PYTHON] 파이썬에서 Factorial을위한 함수 (0) | 2018.10.07 |