• Java字节数组转按radix进制输出


    代码如下:

     1 public class Main_bytesToStr {
     2 
     3     public static void main(String[] args) throws IOException {
     4         // TODO Auto-generated method stub
     5         System.out.println("defaultCharset: " + Charset.defaultCharset().name());
     6         System.out.println("file.encoding:" + System.getProperty("file.encoding"));
     7         System.out.println();
     8 
     9         String word = "a好";// 字符或字符串在Java内存中始终以内部编码即UTF-16保存。且采用大端
    10         printTransStr(word, "ISO-8859-1");
    11         printTransStr(word, "GBK");
    12         printTransStr(word, "Unicode");
    13         printTransStr(word, "UTF-16");
    14         printTransStr(word, "UTF-16BE");
    15         printTransStr(word, "UTF-16LE");
    16         System.out.println();
    17 
    18         InputStreamReader ir = new InputStreamReader(System.in);
    19 
    20     }
    21 
    22     public static void printTransStr(String word, String charset) throws UnsupportedEncodingException {
    23         System.out.println("--------" + word + "  " + charset + "--------");
    24         byte[] bytes = word.getBytes(charset);
    25         System.out.println(binaryToStr(bytes, 2));
    26         System.out.println(binaryToStr(bytes, 8));
    27         System.out.println(binaryToStr(bytes, 10));
    28         System.out.println(binaryToStr(bytes, 16));
    29     }
    30 
    31     /**
    32      * 将byte[]转为各种进制的字符串
    33      * 
    34      * @param bytes
    35      *            byte[]
    36      * @param radix
    37      *            基数可以转换进制的范围,从Character.MIN_RADIX到Character.MAX_RADIX,超出范围后变为10进制
    38      * @return 转换后的字符串
    39      */
    40     public static String binaryToStr(byte[] bytes, int radix) {
    41         return new BigInteger(1, bytes).toString(radix);// 这里的1代表正数
    42         // System.out.printf("%x ",bytes[0]);
    43     }
    44 }

    结果如下:

     1 defaultCharset: GBK
     2 file.encoding:GBK
     3 
     4 --------a好  ISO-8859-1--------
     5 110000100111111
     6 60477
     7 24895
     8 613f
     9 --------a好  GBK--------
    10 11000011011101011000011
    11 30335303
    12 6404803
    13 61bac3
    14 --------a好  Unicode--------
    15 111111101111111100000000011000010101100101111101
    16 7757740030254575
    17 280371176495485
    18 feff0061597d
    19 --------a好  UTF-16--------
    20 111111101111111100000000011000010101100101111101
    21 7757740030254575
    22 280371176495485
    23 feff0061597d
    24 --------a好  UTF-16BE--------
    25 11000010101100101111101
    26 30254575
    27 6379901
    28 61597d
    29 --------a好  UTF-16LE--------
    30 1100001000000000111110101011001
    31 14100076531
    32 1627422041
    33 61007d59

     从Unicode或UTF-16的结果也可以看出,JVM采用大端方式存多字节的数据。

  • 相关阅读:
    使用RPC的接口创建账户同时购买内存并为其抵押CPU和NET资源
    使用RPC的接口创建账户
    【移动安全基础篇】——21、Android脱壳思路
    插件
    NGUI 优化
    影子
    优化文章索引
    MVC
    《你不常用的c#之XX》
    CMake
  • 原文地址:https://www.cnblogs.com/z-sm/p/6049125.html
Copyright © 2020-2023  润新知