public class Test{
    public static void main(String[] args) throws Exception {
        String str = "啊";
        int[] quweima = getQuweima(str);
        for(int i : quweima) {
            System.out.printf("%04d%n", i);
        }
    }
      public static String convertDecimalToBinary ( int value){
           return Integer.toHexString(value);
           }
    public static int[] getQuweima(String str) throws Exception {
        byte[] b = str.getBytes("GB2312");
        int[] quweima = new int[b.length / 2];
        for(int i = 0, k = b.length / 2; i < k; i++) {
         int m = ((b[2 * i] - 0xA0) & 0xff);
         int n = (b[2 * i + 1] - 0xA0) & 0xff;
           System.out.printf("%02d%n",convertDecimalToBinary(m));
           System.out.printf("%02d%n",convertDecimalToBinary(n));
            quweima[i] = (((b[2 * i] - 0xA0) & 0xff) * 100) + ((b[2 * i + 1] - 0xA0) & 0xff);
        }
        return quweima;
    }
}想输出1001,即“啊”字区位码(1601)对应的16进制(1001H)
为什么调程序报错啊???
顺便问下 quweima[i] = (((b[2 * i] - 0xA0) & 0xff) * 100) + ((b[2 * i + 1] - 0xA0) & 0xff);他这个区位码是怎么算出来的,我怎么觉得他用的是整型数组,一位一位算出来的
谢谢

解决方案 »

  1.   

    public class Example {
        public static void main(String[] args) throws Exception {
            String str = "啊";
            int[] quweima = getQuweima(str);
            for(int i : quweima) {
                System.out.printf("%04d%n", i);
            }
        }    public static int[] getQuweima(String str) throws Exception {
            byte[] b = str.getBytes("GB2312");
            int[] quweima = new int[b.length / 2];
            for(int i = 0, k = b.length / 2; i < k; i++) {
                int m = ((b[2 * i] - 0xA0) & 0xff);
                int n = (b[2 * i + 1] - 0xA0) & 0xff;
                System.out.printf("%02x%n",m);
                System.out.printf("%02x%n",n);
                quweima[i] = (((b[2 * i] - 0xA0) & 0xff) * 100) + ((b[2 * i + 1] - 0xA0) & 0xff);
            }
            return quweima;
        }
    }
      

  2.   

    明白了
    %02d%n  d代表的是十进制
    %02x%n  x代表的是16进制,输出的是16进制
    我就是想问怎么在16进制前面加0X,我查了是加#,但是加的位置是在02后,这样的话01输出就是0x1,而不是0x01了,求解