구조체를 이진 파일로부터 언팩하려고하는데, 처음 4 바이트가 정수 64 (값 64)이고 다음 3 * 8 바이트가 3 배가된다는 것을 알고있다.파이썬 struct unpacking integer double로 시작한다.
with open('data', mode='rb') as file:
fileContent = file.read()
가 그럼 난 시도해보십시오 :이 같은 포함한 FileContent라는 벡터에 데이터를 저장 한
print(struct.unpack("i", fileContent[0:4]))
이 제대로 나는 또한 다음의 두 배를 읽고 싶은, 그러나 수 (64)를 인쇄 그래서 (12 바이트의 총 산출, 정수는 4 바이트이어야하며, 이중 8해야하기 때문에)
print(struct.unpack("id", fileContent[0:12]))
위의 문을 수정합니다.
print(struct.unpack("d", fileContent[4:12])
나는 이중의 정확한 값을 얻을하지 않습니다 : 그러나, 나는 이중 만 사용을 읽으려고하면
또한struct.error: unpack requires a bytes object of length 16
이 없다는 오류를 얻을! 위의 슬라이스를 [8:16]으로 변경하면 올바른 값을 얻을 수 있습니다. 누군가 설명해 주시겠습니까? 파일의 처음 4 바이트는 정수 여야하고 다음 8 바이트는 두 배가되어야한다는 것을 알고 있습니다. read()는 어떻게 든 정수를 0으로 채 웁니다, 아니면 계속 진행되고 있습니까?
입력 구조가 패딩되어 'double'이 8 바이트에 정렬됩니다. –
터미널에서 바이너리 덤프를 만들었고 '데이터'입력 파일이 패딩되지 않았습니다 (리틀 엔디안 컴퓨터에있는 계정, 처음 네 바이트는 01000000 00000000 00000000 00000000). 다음 바이트는 0이 아니며 그들이 플로트를 대표한다고 생각합니다. 거기에 자동으로 데이터를 패드 read() 함수와 무언가가 있습니까? – JezuzStardust