package org.lib.code; |
005 |
006 | /** |
007 | * java String 与各种进制字符之间的转换 |
008 | * |
009 | * |
010 | */ |
011 | public class Coding { |
012 |
013 | /** |
014 | * 字符串转换成十六进制值 |
015 | * @param bin String 我们看到的要转换成十六进制的字符串 |
016 | * @return |
017 | */ |
018 | public static String bin2hex(String bin) { |
019 | char [] digital = "0123456789ABCDEF" .toCharArray(); |
020 | StringBuffer sb = new StringBuffer( "" ); |
021 | byte [] bs = bin.getBytes(); |
022 | int bit; |
023 | for ( int i = 0 ; i < bs.length; i++) { |
024 | bit = (bs[i] & 0x0f0 ) >> 4 ; |
025 | sb.append(digital[bit]); |
026 | bit = bs[i] & 0x0f ; |
027 | sb.append(digital[bit]); |
028 | } |
029 | return sb.toString(); |
030 | } |
031 |
032 | /** |
033 | * 十六进制转换字符串 |
034 | * @param hex String 十六进制 |
035 | * @return String 转换后的字符串 |
036 | */ |
037 | public static String hex2bin(String hex) { |
038 | String digital = "0123456789ABCDEF" ; |
039 | char [] hex2char = hex.toCharArray(); |
040 | byte [] bytes = new byte [hex.length() / 2 ]; |
041 | int temp; |
042 | for ( int i = 0 ; i < bytes.length; i++) { |
043 | temp = digital.indexOf(hex2char[ 2 * i]) * 16 ; |
044 | temp += digital.indexOf(hex2char[ 2 * i + 1 ]); |
045 | bytes[i] = ( byte ) (temp & 0xff ); |
046 | } |
047 | return new String(bytes); |
048 | } |
049 |
050 | /** |
051 | * java字节码转字符串 |
052 | * @param b |
053 | * @return |
054 | */ |
055 | public static String byte2hex( byte [] b) { //一个字节的数, |
056 |
057 | // 转成16进制字符串 |
058 |
059 | String hs = "" ; |
060 | String tmp = "" ; |
061 | for ( int n = 0 ; n < b.length; n++) { |
062 | //整数转成十六进制表示 |
063 |
064 | tmp = (java.lang.Integer.toHexString(b[n] & 0XFF )); |
065 | if (tmp.length() == 1 ) { |
066 | hs = hs + "0" + tmp; |
067 | } else { |
068 | hs = hs + tmp; |
069 | } |
070 | } |
071 | tmp = null ; |
072 | return hs.toUpperCase(); //转成大写 |
073 |
074 | } |
075 |
076 | /** |
077 | * 字符串转java字节码 |
078 | * @param b |
079 | * @return |
080 | */ |
081 | public static byte [] hex2byte( byte [] b) { |
082 | if ((b.length % 2 ) != 0 ) { |
083 | throw new IllegalArgumentException( "长度不是偶数" ); |
084 | } |
085 | byte [] b2 = new byte [b.length / 2 ]; |
086 | for ( int n = 0 ; n < b.length; n += 2 ) { |
087 | String item = new String(b, n, 2 ); |
088 | // 两位一组,表示一个字节,把这样表示的16进制字符串,还原成一个进制字节 |
089 |
090 | b2[n / 2 ] = ( byte ) Integer.parseInt(item, 16 ); |
091 | } |
092 | b = null ; |
093 | return b2; |
094 | } |
095 |
096 | public static void main(String[] args) { |
097 | String content = "技术性问题EDF%&^%#_|~" ; |
098 | System.out.println(bin2hex(content)); |
099 | System.out.println(hex2bin(bin2hex(content))); |
100 | } |
101 | } |