以下は、マジック ナンバーを使用してファイルの MIME タイプを検出するために使用されるコードの抜粋です。
ここで 16 進数に焦点が当てられていることは理解できます。
しかし、なぜint
s を使用し、なぜ 0xFF とビットごとの AND を使用するのでしょうか?
byte[] header = new byte[11];
System.arraycopy(data, 0, header, 0, Math.min(data.length, header.length));
int c1 = header[0] & 0xff;
int c2 = header[1] & 0xff;
int c3 = header[2] & 0xff;
int c4 = header[3] & 0xff;
int c5 = header[4] & 0xff;
int c6 = header[5] & 0xff;
int c7 = header[6] & 0xff;
int c8 = header[7] & 0xff;
int c9 = header[8] & 0xff;
int c10 = header[9] & 0xff;
int c11 = header[10] & 0xff;
if (c1 == 0xCA && c2 == 0xFE && c3 == 0xBA && c4 == 0xBE) // CAFEBABE
{
return "application/java-vm";
}