>  기사  >  백엔드 개발  >  Python을 사용하여 바이너리 파일을 읽고 쓰는 방법

Python을 사용하여 바이너리 파일을 읽고 쓰는 방법

WBOY
WBOY앞으로
2023-05-03 12:40:063044검색

1. 소개

Python은 C/C++ 및 Python 데이터 형식을 변환하기 위해 파일의 바이너리 데이터를 읽고 쓰려면 struct 모듈을 사용해야 합니다.

2. 구조체 모듈 소개

구조체 모듈에서 가장 일반적으로 사용되는 함수는 pack과 unpack입니다. fmt,v1,v2… )

string 주어진 형식(fmt)에 따라 데이터를 문자열(바이트 스트림)로 변환하고 문자열을 반환합니다.pack_into(fmt,buffer,offset,v1, v2… )None 주어진 형식(fmt)에 따라 데이터를 문자열(바이트 스트림)로 변환하고 오프셋으로 시작하는 버퍼에 바이트 스트림을 씁니다. (버퍼는 쓰기 가능한 버퍼, 사용 가능한 배열 모듈) unpack(fmt,v1,v2……)tuple지정된 형식(fmt)에 따라 바이트 스트림을 구문 분석하고 구문 분석 결과를 반환pack_from(fmt, buffer ,offset)tuple주어진 형식(fmt)에 따라 오프셋으로 시작하는 버퍼를 구문 분석하고 구문 분석 결과를 반환합니다.calcsize(fmt)fmt의 크기주어진 형식(fmt)이 몇 바이트를 차지하는지 계산합니다. 메모리 정렬에 주의하세요FormatC TypePython typeStandard의 유형에 해당합니다. 크기
3. 구조체 모듈의 fmt 데이터 형식은 C/C++ 및 Python

signed charinteger1 Bunsigned charinteger1?boolintegerintegerinteger 정수integerinteger8848pchar[ ]stringinteger참고: 코드, beddd5ed187c1933145d7f9d05d64f9d 빅 엔디안을 의미합니다.
import struct

# 打开文件
with open("binary_file.bin", "wb") as f:

    # 写入4个字节的整数(值为12345)
    int_value = 12345
    f.write(struct.pack("<i", int_value))

    # 写入8个字节的双精度浮点数(值为3.14159)
    double_value = 3.14159
    f.write(struct.pack("<d", double_value))

    # 写入一个字节的布尔值(值为True)
    bool_value = True
    f.write(struct.pack("<?", bool_value))

    # 写入一个定长字符串(10个字符,值为"hello")
    string_value = "hello".encode("utf-8")
    f.write(struct.pack("<5s", string_value))

    # 写入一个定长字节数组(20个字节,值为b"\x01\x02\x03...\x14")
    byte_array_value = bytes(range(1, 21))
    f.write(struct.pack("<20s", byte_array_value))

    f.close()

# 打开文件
with open("binary_file.bin", "rb") as f:

    # 读取4个字节,解析成一个整数
    int_value = struct.unpack("<i", f.read(4))[0]
    
    # 读取8个字节,解析成一个双精度浮点数
    double_value = struct.unpack("<d", f.read(8))[0]

    # 读取一个字节,解析成一个布尔值
    bool_value = struct.unpack("<?", f.read(1))[0]

    # 读取一个字符串,解析成一个定长字符串(10个字符)
    string_value = struct.unpack("<5s", f.read(5))[0].decode("utf-8")

    # 读取一个字节数组,解析成一个定长字节数组(20个字节)
    byte_array_value = struct.unpack("<20s", f.read(20))[0]

    # 打印结果
    print(f"int_value: {int_value}")
    print(f"double_value: {double_value}")
    print(f"bool_value: {bool_value}")
    print(f"string_value: {string_value}")
    print(f"byte_array_value: {byte_array_value}")

    f.close()
str= u&#39;hello&#39;
5.3 문자열 앞에 b를 추가합니다 . 문자열이 바이트 유형임을 나타냅니다. Python3에서 바이트와 str 사이의 상호 변환 방법은 5.4입니다. 문자열 앞에 f를 추가합니다f로 시작한다는 것은 문자열에서 중괄호 안의 Python 표현식이 지원된다는 의미이며, 문자열 연결

_Bool
1 h short
2 H unsigned short
2 i int
4 I unsigned int
4 l long
4 L unsigned long
4 롱롱
Q ed long long integer
f float float
d double float
s 문자[] 문자열
P void *
4. 예
5. Python 문자열 앞에 u, r, b, f를 추가하는 의미 다음 문자열은 유니코드 형식으로 인코딩되며 일반적으로 소스 코드 저장 형식 문제를 방지하기 위해 중국어 문자열 앞에 사용되어 다시 사용할 때 문자가 깨집니다. 5.2. 백슬래시 전송 메커니즘을 제거하려면 문자열 앞에 r 을 추가하세요. (특수 문자: 백슬래시와 해당 문자는 해당 특수 의미를 나타냅니다. 예를 들어 가장 일반적인 "n"은 줄 바꿈을 의미하고 "t"는 탭을 의미합니다.)
str= r&#39;hello\n\t\n&#39;
bytes = b&#39;hello&#39;
str.encode(‘utf-8&#39;)
bytes.decode(‘utf-8&#39;)
name = &#39;Lily&#39;
print(f&#39;My name is {name}.&#39;)

위 내용은 Python을 사용하여 바이너리 파일을 읽고 쓰는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 yisu.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제