정수, 부동 소수점 등과 같은 일부 데이터를 파이썬으로 이진 파일로 내 보내야합니다. 나중에 C #으로 파일을 다시 읽어야하는데 작동하지 않습니다.
나는 파이썬으로 바이너리 파일을 작성하는 여러 가지 방법을 시도했고 파이썬으로도 읽는 한 작동합니다.
a = 3
b = 5
with open('test.tcd', 'wb') as file:
file.write(bytes(a))
file.write(bytes(b))
또는 다음과 같이 작성하십시오.
import pickle as p
with open('test.tcd', 'wb') as file:
p.dump([a, b], file)
현재 다음과 같이 C #으로 파일을 읽고 있습니다.
static void LoadFile(String path)
{
BinaryReader br = new BinaryReader(new FileStream(path, FileMode.Open));
int a = br.ReadInt32();
int b = br.ReadInt32();
System.Diagnostics.Debug.WriteLine(a);
System.Diagnostics.Debug.WriteLine(b);
br.Close();
}
불행히도 출력은 3과 5가 아니며 대신 내 출력은 0입니다. 바이너리 파일을 올바르게 읽거나 쓰려면 어떻게해야합니까?
- 답변 # 1
- 답변 # 2
파이썬이 C #이 예상하는 것과 동일한 형식으로 데이터를 쓰지 않을 수 있습니다. 바이트 엔디안을 바꾸거나 다른 작업을 수행해야 할 수 있습니다. 대신 원시 바이트를 읽고 사용할 수 있습니다.
BitConverter
문제가 해결되는지 확인합니다.또 다른 옵션은 Python에서 명시 적으로 endianess를 지정하는 것입니다. Big endian은 C #의 기본 바이너리 리더 형식이라고 생각합니다.
an_int = 5 a_bytes_big = an_int.to_bytes(2, 'big') print(a_bytes_big) Output b'\x00\x05' a_bytes_little = an_int.to_bytes(2, 'little') print(a_bytes_little) Output b'\x05\x00'
관련 자료
- 파이썬에서 바이너리 파일을 읽고 그것을 정수 배열로 변환하는 방법은 무엇입니까?
- newline - 파일에서 읽는 파이썬과 리터럴 직접 할당
- 내 파이썬 프로그램이 파일의 다음 줄을 읽지 않는 이유는 무엇입니까?
- 파이썬에서 DNS 패킷 읽기
- loops - 한 번에 두 줄을 읽지 않고 미리 한 줄을 읽어야 함 (Python)
- pandas - 파이썬 - csv에서 데이터를 읽은 다음 루프의 데이터 및 파일 번호를 사용하여 새 csv에 쓰기
- pandas - 파이썬 - 글롭 :파일 이름에 따라 csv 데이터 읽기 및 파일 이름에 따라 색상으로 데이터 플로팅
- 파일에서 읽기는 파이썬의 마지막 줄만 읽습니다
- 이 qouting을 수정하는 방법은 파이썬에서 csv 파일을 읽을 때 정수 여야합니다
- c - 부동 소수점에 대한 이진 파일을 읽고 배열에 넣기
- 최소한의 코드 줄을 사용하여 파이썬에서 파일 읽기
- 이진 트리를 Python에서 레벨 순서가있는 목록으로 변환
- 실제 이진수를 파이썬으로 파일에 저장하는 방법
- 클릭 진입 점이있는 Python 바이너리 PEX 버전을 표시 할 수 없음
- list - 파이썬 이진 검색은 해결할 수 없습니다
- librosa - 파이썬에서 opus 오디오 파일 읽기
- list - 현재 '좌표'에 무작위 바이너리 정보를 추가하려면 어떻게해야합니까? (파이썬)
- multithreading - Python Tkinter는 GUI를 유지하고 파이프에서 읽기
- python - 파이썬 - txt 파일 읽기 및 파일이 비어 있는지 확인
Python에서는 각각 4 바이트 씩 정수를 작성해야합니다. 여기에서 더 많은 것을 읽으십시오 : struct.pack
이제 C # 코드가 작동합니다.