java byte数组转2进制字符串_Java byte数组与十六进制字符串互转

1 /**

2 * reference apache commons http://commons.apache.org/codec/4 *5 *@authorAub6 *7 */

8 public classHex {9

10 /**

11 * 用于建立十六进制字符的输出的小写字符数组12 */

13 private static final char[] DIGITS_LOWER = { '0', '1', '2', '3', '4', '5',14 '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'};15

16 /**

17 * 用于建立十六进制字符的输出的大写字符数组18 */

19 private static final char[] DIGITS_UPPER = { '0', '1', '2', '3', '4', '5',20 '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'};21

22 /**

23 * 将字节数组转换为十六进制字符数组24 *25 *@paramdata26 * byte[]27 *@return十六进制char[]28 */

29 public static char[] encodeHex(byte[] data) {30 return encodeHex(data, true);31 }32

33 /**

34 * 将字节数组转换为十六进制字符数组35 *36 *@paramdata37 * byte[]38 *@paramtoLowerCase39 * true 传换成小写格式 , false 传换成大写格式40 *@return十六进制char[]41 */

42 public static char[] encodeHex(byte[] data, booleantoLowerCase) {43 return encodeHex(data, toLowerCase ?DIGITS_LOWER : DIGITS_UPPER);44 }45

46 /**

47 * 将字节数组转换为十六进制字符数组48 *49 *@paramdata50 * byte[]51 *@paramtoDigits52 * 用于控制输出的char[]53 *@return十六进制char[]54 */

55 protected static char[] encodeHex(byte[] data, char[] toDigits) {56 int l =data.length;57 char[] out = new char[l << 1];58 //two characters form the hex value.

59 for (int i = 0, j = 0; i < l; i++) {60 out[j++] = toDigits[(0xF0 & data[i]) >>> 4];61 out[j++] = toDigits[0x0F &data[i]];62 }63 returnout;64 }65

66 /**

67 * 将字节数组转换为十六进制字符串68 *69 *@paramdata70 * byte[]71 *@return十六进制String72 */

73 public static String encodeHexStr(byte[] data) {74 return encodeHexStr(data, true);75 }76

77 /**

78 * 将字节数组转换为十六进制字符串79 *80 *@paramdata81 * byte[]82 *@paramtoLowerCase83 * true 传换成小写格式 , false 传换成大写格式84 *@return十六进制String85 */

86 public static String encodeHexStr(byte[] data, booleantoLowerCase) {87 return encodeHexStr(data, toLowerCase ?DIGITS_LOWER : DIGITS_UPPER);88 }89

90 /**

91 * 将字节数组转换为十六进制字符串92 *93 *@paramdata94 * byte[]95 *@paramtoDigits96 * 用于控制输出的char[]97 *@return十六进制String98 */

99 protected static String encodeHexStr(byte[] data, char[] toDigits) {100 return newString(encodeHex(data, toDigits));101 }102

103 /**

104 * 将十六进制字符数组转换为字节数组105 *106 *@paramdata107 * 十六进制char[]108 *@returnbyte[]109 *@throwsRuntimeException110 * 如果源十六进制字符数组是一个奇怪的长度,将抛出运行时异常111 */

112 public static byte[] decodeHex(char[] data) {113

114 int len =data.length;115

116 if ((len & 0x01) != 0) {117 throw new RuntimeException("Odd number of characters.");118 }119

120 byte[] out = new byte[len >> 1];121

122 //two characters form the hex value.

123 for (int i = 0, j = 0; j < len; i++) {124 int f = toDigit(data[j], j) << 4;125 j++;126 f = f |toDigit(data[j], j);127 j++;128 out[i] = (byte) (f & 0xFF);129 }130

131 returnout;132 }133

134 /**

135 * 将十六进制字符转换成一个整数136 *137 *@paramch138 * 十六进制char139 *@paramindex140 * 十六进制字符在字符数组中的位置141 *@return一个整数142 *@throwsRuntimeException143 * 当ch不是一个合法的十六进制字符时,抛出运行时异常144 */

145 protected static int toDigit(char ch, intindex) {146 int digit = Character.digit(ch, 16);147 if (digit == -1) {148 throw new RuntimeException("Illegal hexadecimal character " +ch149 + " at index " +index);150 }151 returndigit;152 }153

154 public static voidmain(String[] args) {155 String srcStr = "待转换字符串";156 String encodeStr =encodeHexStr(srcStr.getBytes());157 String decodeStr = newString(decodeHex(encodeStr.toCharArray()));158 System.out.println("转换前:" +srcStr);159 System.out.println("转换后:" +encodeStr);160 System.out.println("还原后:" +decodeStr);161 }162

163 }

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值