3

我写了下面的简单程序以阿拉伯语输出你好:“سلام”,但它在控制台上的输出不正确:

import static java.lang.Integer.toBinaryString;

import java.util.Arrays;


public class testOfPrintln {
    public static void main(String []strings){
        String test="salam";
        String test2="سلام";//unicode , arabic
        byte []strbytes=test.getBytes();
        int i=1;
        for(byte bb:strbytes)
            System.out.println(i++  + "    -> " + bb);
        byte []strbytes2=test2.getBytes();
        i=1;
        for(byte bb2:strbytes2){
            System.out.println(i++  + "    ->   " + bb2);
        }
    }

}

和输出:

1    -> 115
2    -> 97
3    -> 108
4    -> 97
5    -> 109
1    -> -40
2    -> -77
3    -> -39
4    -> -124
5    -> -40
6    -> -89
7    -> -39
8    -> -123

为什么字节前有一个“-”字符?例如:-123 吨。

4

2 回答 2

2

在 Javabyte中是一个有符号整数,其值范围从 -128 到 127。如果您想要无符号值,请强制转换为int(在与运算时隐式发生)并与 255 进行与运算。

System.out.println(i++  + "    -> " + (bb & 0xff));
于 2013-07-21T18:52:02.860 回答
1

Java 的设计者制作了signedbyte类型,尽管 99% 的时候这并不是任何人想要的。所以它的范围是 -128 到 +127 而不是 0 到 255。要获得正确的值,它带有 0xFF(二进制,是 8 个 1 位)。(关于二进制数值提升的 Java 规则说这个表达式的结果将是类型,这就是为什么 0 到 255 结果适合,不会被压缩回一个字节并再次变为负数。):int

System.out.println(i++  + "    ->   " + (bb2 & 0xFF));
于 2013-07-21T18:57:27.737 回答