私はいくつかのCコードを別の言語に移植しようとしています。このセクションの内容を理解することを除いて、ほとんどのコードが動作しています。私が手渡したCコードはコンパイル可能な状態ではないので、実行時分析はできませんが、最後の手段としてそれを修正します。このCコードが値に割り当てるサイズのデータ/位置
バッファは、ファイルの生の内容を指すポインタです。私の予想はこれをしたコードを読むに基づいて
:
pos = 4132
場合、このファイルの位置(pos << 8) + (pos + 1)
から16ビットの符号なしの値を読み取るしようとしています。私はpos = 4132
ため、この計算を行う際に
はしかし、私は、ファイルの終わりを超えた方法です1061925のファイル位置を、取得します。
unsigned short id;
struct file
{
char *buffer;
}
id = (*(file_instance->buffer + pos)<<8) + *(file_instance->buffer+pos+1);
それの隣に。 'pos'のオクテットが' 0xAA'で、 'pos + 1''の' 0xBB'のオクテットの場合、 '0xAABB'が得られます。 '|'はこの文脈で '+'と同じことをします。 – PSkocik
'*(file_instance-> buffer + pos)'は 'pos'だけでなく左シフトしていることに注意してください。 – aschepler
最後のステートメントが配列の添え字で記述されていれば、より明確になるでしょう: 'id =(file_instance-> buffer [pos] << 8)+ file_instance-> buffer [pos + 1];' – dbush