代码之家  ›  专栏  ›  技术社区  ›  bajafresh4life

Java字符/整数转换混淆

  •  0
  • bajafresh4life  · 技术社区  · 15 年前

    给出以下Java代码:

        FileOutputStream os = new FileOutputStream("/tmp/test.dat");
        os.write(0x14);
        os.write(0xfe);
        os.write(0xae);
    
        os.write(String.valueOf((char) 0x14).getBytes("UTF-8"));
        os.write(String.valueOf((char) 0xfe).getBytes("UTF-8"));
        os.write(String.valueOf((char) 0xae).getBytes("UTF-8"));
    
        os.write("\u0014".getBytes("UTF-8"));
        os.write("\u00fe".getBytes("UTF-8"));
        os.write("\u00ae".getBytes("UTF-8"));
    
        os.close();
    

    有人能解释一下test.dat的前3个字节是什么吗

    14 fe ae
    

    14 c3 be c2
    

    基本上,我想输出14字节。我将这些值存储为一个字符串常量,并将这些常量的值写入一个UTF-8文件,但是输出了14c3bec2。显然,我对这些字节序列在Java中如何转换的理解存在差距。

    谢谢!

    3 回复  |  直到 15 年前
        1
  •  4
  •   Matthew Flaschen    15 年前

    它给出:

    0x 14 fe ae 14 c3 be c2 ae 14 c3 be c2 ae
    

    底线是,如果您想存储文字字节,只需使用字节数组。

        2
  •  1
  •   Yann Ramin    15 年前

    "\u00fe" 不是字节 0xfe ,它是Unicode码位 0xfe型 ,当用UTF-8编码时,它可以成为多字节值(如上所示)。

        3
  •  0
  •   Richard Fearn    15 年前

    你漏了一个字节:你应该 14 c3 be c2 ae .

    在你最后的六个月里 os.write 调用时,Java将每个字符存储在一个单字符的Unicode字符串中。当你打电话的时候 getBytes 这将为您提供这些字符的UTF-8表示。对于U+00FE( þ c3 be ,而对于U+00AE( ® c2 ae .

    推荐文章