私は実質的に Matlab の知識がなく、いくつかの解析ルーチンを Python に変換する必要があります。それらは大きなファイル用で、それ自体が「ブロック」に分割されており、ファイルの上部にあるチェックサムで最初から問題が発生しています。
ここMatlabで何が起こっているのでしょうか?
status = fseek(fid, 0, 'cof');
fposition = ftell(fid);
disp(' ');
disp(['** Block ',num2str(iBlock),' File Position = ',int2str(fposition)]);
% ----------------- Block Start ------------------ %
[A, count] = fread(fid, 3, 'uint32');
if(count == 3)
magic_l = A(1);
magic_h = A(2);
block_length = A(3);
else
if(fposition == file_length)
disp(['** End of file OK']);
else
disp(['** Cannot read block start magic ! Note File Length = ',num2str(file_length)]);
end
ok = 0;
break;
end
fid は現在見ているファイルです iBlock はファイル内のどの「ブロック」にいるかのカウンターです
magic_l と magic_h は、後でチェックサムを処理するためのものです。そのためのコードは次のとおりです (上記のコードから直接続きます)。
disp(sprintf(' Magic_L = %08X, Magic_H = %08X, Length = %i', magic_l, magic_h, block_length));
correct_magic_l = hex2dec('4D445254');
correct_magic_h = hex2dec('43494741');
if(magic_l ~= correct_magic_l | magic_h ~= correct_magic_h)
disp(['** Bad block start magic !']);
ok = 0;
return;
end
remaining_length = block_length - 3*4 - 3*4; % We read Block Header, and we expect a footer
disp(sprintf(' Remaining Block bytes = %i', remaining_length));
%08X
ともので何が起こっているのhex2dec
ですか?- また、なぜ
3*4
代わりに指定するの12
ですか?
実際には、ファイルの最初の 3 文字をプルするだけな[A, count] = fread(fid, 3, 'uint32');
ので、Python でレプリケートする方法を知りたいです。io.readline()
ここでポイントを逃した場合はお詫び申し上げます。ファイルを使用すると、本来あるべきではないものが返されるように見えるだけで、非常に長くなる可能性がある場合に、 が 1 バイトに収まるio.readline(3)
方法がわかりません。block_length
このランブルを読んでくれてありがとう。私が知りたいことを理解していただければ幸いです!(どんな洞察も大歓迎です。)