파일에 바이너리 데이터 (ints, double, raw bytes)를 쓰는 응용 프로그램에서 작업하고 있습니다. 그냥 잘 작동 것처럼파이썬은 디스크에 쓰여진 struct.pack 문자열을 mangles합니다.
>>> import struct
>>> import io
>>> out = io.open("123.bin", "wb+")
>>> format = "!i"
>>> data = struct.pack(format, 1)
>>> out.write(data)
4L
>>> data
'\x00\x00\x00\x01'
>>> out.close()
>>> infile = io.open("123.bin", "rb")
>>> instr = infile.read()
>>> instr
'\x00\x00\x00\x01'
>>> struct.unpack("!I", instr)
(1,)
그래서 모든 것이 같습니다
문제는 데이터가 실제로 파일에 나는 그것이 될 것으로 기대 방법을 작성되지 않는다는 것이다. 그러나 자세히 살펴보면시에, 123.bin
파일 내용을 다음 있습니다 : 바이트가 io.write()
로 바꾼 것처럼
$ hexdump 123.bin
0000000 0000 0100
0000004
그래서이 보인다!
>>> type(struct.pack(format, 1))
<type 'str'>
그럼, 내가 잘못하고 있어요 : io.write()
가 struct.pack
가 str
를 반환 않습니다, 문제가, "주어진 바이트 된 ByteArray 객체를"받아들이는
파이썬 문서 말한다? 문자셋 변환없이 str
을 bytes
으로 변환하려면 어떻게해야하나요?
'hexdump -C'는'00000000 00 00 00 01 | .... |'을 반환합니다. 그래서'hexdump'의 기본 모드가 "broken"인 것처럼 보입니다. –