2017-11-15 15 views
1

~ 75 000 비트 (매우 긴 문자열)로 구성된 문자열이 있습니다.파이썬 - 이진 파일 내에 긴 비트 문자열을 작성하십시오.

이 비트 열로 표시되는 이진 파일을 만들고 싶습니다. 는 다음 코드했다 :

byte_array = bytearray(global_bits_str.encode()) 
with open('file1.bin', 'wb') as f: 
    f.write(byte_array) 

을하지만 file1.bin을 확인할 때 나는 그것이 75 000 바이트 대신 75 000 비트로 구성 있다고 볼 수 있습니다. 파일에서 ascii (비트 당 1 바이트)로 인코딩 된 것 같습니다.

제안 사항?

답변

2

당신은 다음bytearray에 되었 정수의 순서로 진 문자열을 변환 할 int 내장을 사용할 수 있습니다.

예 하나 바이트 :

>>> int('10101010', 2) 
170 
>>> bytearray([170]) 
bytearray(b'\xaa') 

분할 문자열 :

chunks = [bit_string[n:n+8] for n in range(0, len(bit_string), 8)] 

당신은 그것을 전체 바이트하지 않을 수 있기 때문에 마지막 청크에 대한 특별한 케이스를해야 할 것이다하는 ljust으로 왼쪽에 0으로 칠하십시오.

함께 퍼팅 :

def to_bytes(bits, size=8, pad='0'): 
    chunks = [bits[n:n+size] for n in range(0, len(bits), size)] 
    if pad: 
     chunks[-1] = chunks[-1].ljust(size, pad) 
    return bytearray([int(c, 2) for c in chunks] 

# Usage: 
byte_array = to_bytes(global_bits_str) 
+0

감사를 당신의 대답을 마지막으로 나는 그 그래서 ~ 9400 바이트로 구성된 파일을했습니다 좋아 보인다! –