実現したいこと
バイナリーファイルで632バイトの塊が複数つながっているファイルがあり,それを読み込んで項目ごとに解釈してアウトプットしたいです
前提
各塊の頭は7F7Fで始まります。
各塊の最後の2バイトはチェックサムを表しており,その2バイトを読み込んで表示したいです。
発生している問題・エラーメッセージ
バイナリファイルを特定のソフトで読み込んで確認すると,1塊目のチェックサムは74F9となっており,その次の2バイトが7F7F(2塊目開始の合図)となっております。
順番にバイナリーを読み込んでいき,最後の2バイトのところを読み込ませて表示するとE287と表示されます。
読んでいるところがずれているのかと思い,次の2バイトを読み込ませて表示すると7F7Fとなり,正しいところを読ませていることがわかりました。
さらに,確認のために7F7Fのところまで読ませるとチェックサムは74F9と正しい値を読んでくれます。
しかし,そのまま続けると2塊目以降の読み込み位置が2バイト分ずれるため,f.seek(-2,1)を追加して次の読み込み位置を戻すと,チェックサムは再びE287となります。
元のバイナリーファイルを読んでもどこにもE287はなく,なぜこのような値が読み込まれるのか,解決させるにはどうしたらいいのか全く分かりません。
該当のソースコード
Python
1ソースコード 2#Check Sum ===Check sumの読み込み 3cs_bytes = f.read(2) 4cs = list(cs_bytes) 5self.cs1=0 6self.cs1=int.from_bytes(cs[0:2], "little") #チェックサム 7 8ck_bytes = f.read(2) 9ck = list(ck_bytes) 10self.ck1=int.from_bytes(ck[0:2], "little") #チェックサム 11 12f.seek(-2,1) 13 14print(f'{self.cs1:x},{self.ck1}') 15 16 17### 試したこと 18もともとckは入れずにやっていましたが,そうすると 19cs=E287となりました 20そこで読み取り位置の確認のためckを入れました 21すると 22cs=74F9,ck=7F7F 23となりましたが,次以降の読み込みがずれました(ckに2バイト読み込ませているから当然)。 24 25そのため,f.seek(-2,1)を入れると 26cs=E287にもどり,ck=7F7F 27となり,ずれはなくなりました。 28 29この現象が起こる理由が全く分かりません。 30### 補足情報(FW/ツールのバージョンなど) 31 32該当箇所のバイナリーはチェックサムの2バイト手前と7F7Fの2バイト後までは 33B7 B7 F9 74 7F 7F 78 02 34となっております。 35
