繁体   English   中英

Mimetype检测-此代码中&0xff的作用是什么?

[英]Mimetype detection - What is the purpose of & 0xff in this code?

以下是用于使用幻数检测文件的mime类型的代码的摘录。

我可以理解十六进制是这里的重点。

但是,为什么要使用int ,为什么要与0xFF按位与?

    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";
    }

在Java中, byte是带符号的类型。 例如, 0xFF作为byte实际上是-1作为int 结果是(byte) 0xFF != 0xFF ,这可能会造成混淆。 因此,当尝试将byte值转换为int时将其视为无符号时,应始终写入myByte & 0xFF以确保在不希望出现符号时不将其扩展。

& 0xff将高位设置为0,仅考虑最后8位

header[0] & 0xff;

屏蔽位以仅生成8位/ 2字节。

为什么??

在内存方面 ,它们只使用16位无符号二进制int的补码中的8位,而不是浪费8位。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM