python으로 파일을 2진 덤프, 복구
9004 단어 Python
우선 다음 코드로 파일의 이진법을 텍스트 저장합니다.
genbin.py
import sys
argv = sys.argv
argc = len(argv)
if argc < 2:
print("利用方法:python genbin.py [inputfile] [outputfile]")
quit()
file_binary = ''
count = 0
with open(argv[1], 'rb') as f:
for c in f.read():
crbin = bin(c)[2:]
if len(crbin) < 8:
crbin = ((8 - len(crbin)) * '0') + crbin
print(crbin, end='')
file_binary += crbin
count += 1
if count % 6 == 0:
print()
else:
print(' ', end='')
print(count*8)
with open(argv[2], 'w') as f:
f.writelines(file_binary)
사용 방법은 코드에서 보듯이 python genbin.py [バイナリ化対象ファイル] [ダンプ先ファイル]
입니다. 저장소는 새로 제작되었습니다.아래의 그림 파일을 뒤집어 보세요.
덤프 파일의 시작 부분에 있는 1000자만 나열됩니다.
python.bin
1000100101010000010011100100011100001101000010100001101000001010000000000000000000000000000011010100100101001000010001000101001000000000000000000000000111001001000000000000000000000010000011100000100000000110000000000000000000000000110100110011101011110110111000000000000000000000001000000000000001001001010001000100000101010100011110000000000111101100101111011110100110010011011001011100011101110101001001111001011001010101110101010001101110111010101100011001001000000000000010000000001010100100101110001000000110001011011001001000101000100000010001111100101101001000001000111000111001100110010001100011000101100011110001010111100000001001010011110111100000111100111000010111000011111000100000111111111100101010011111110001100001111111101100111100001101001011100010000010001110000101001111001101011001000110100011110100010001010011000100101100010100011101000000000000100100010000001010111011000100110111000110101101110111101000011111011010110110111101111010100011110111000111001110011011111111110011
실제로 이 01의 나열은 718344[문자|바이트]로 저장되었다. 텍스트의 01이기 때문에 각각 1바이트를 차지하고 저장된 파일의 용량은 원시 파일의 8배이다.또한 다음 코드로 저장된 이진 텍스트 파일에서 원본 파일을 복구할 수 있습니다.
revbin.py
import sys
import struct
argv = sys.argv
argc = len(argv)
if argc < 2:
print("利用方法: python rebin.py [inputfile] [outputfile]")
quit()
binary = ''
with open(argv[1], 'rb') as inf:
binary = inf.readline()
binary_str = binary.decode()
with open(argv[2], 'wb') as outf:
for i in range(int(len(binary_str) / 8)):
# print(hex(int(binary_str[:8], 2)) ,end="")
outf.write(struct.pack("B", int(binary_str[:8], 2)))
binary_str = binary_str[8:]
여기python revbin.py python.bin python.out.png
로 복원해 보세요.출력
python.out.png
은 다음과 같다.응, 외관이 위에 붙인 것과 완전히 같은 것을 회복해서 지령줄에서도 diff를 뽑았어.
같은 것 같은데.
이번에 저장된 이진법이 기재된 텍스트 파일은 이후 다른 프로그램이 읽고 이용하기 때문에 인간 식별에 편리한 형식이 없다.고쳐 쓰면 당연히 기록 내용을 포맷하거나 표준 출력을 하려면 파일에 넘기면 된다.
Reference
이 문제에 관하여(python으로 파일을 2진 덤프, 복구), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/strv13570/items/fb6d5f5dcc0e862b54cd텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)