激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|

服務器之家 - 編程語言 - JAVA教程 - Java將字節轉換為十六進制代碼分享

Java將字節轉換為十六進制代碼分享

2020-03-22 13:00hebedich JAVA教程

我們知道,在java中,一個byte 就是一個字節,也就是八個二進制位;而4個二進制位就可以表示一個十六進制位,所以一個byte可以轉化為2個十六進制位。下面我們就來詳細看下具體方法吧。

本文部分代碼摘錄自網上,并稍加整理,用于字節與十六進制之間的轉換。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
/**
 * reference apache commons <a
 * href="http://commons.apache.org/codec/">http://commons.apache.org/codec/</a>
 *
 * byte占用8位,十六進制字符占用4位。所以可以把一個byte轉換成兩個相應的十六進制字符,即把byte的高4位和低4位 * 分別轉換成相應的十六進制字符H和L,并組合起來。相反的轉換也是同理。
 *
 */
public class Hex {
 
  /**
   * 用于建立十六進制字符的輸出
   */
  private static final char[] DIGITS_LOWER = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
      'a', 'b', 'c', 'd', 'e', 'f' };
 
  /**
   * 用于建立十六進制字符的輸出
   */
  private static final char[] DIGITS_UPPER = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
      'A', 'B', 'C', 'D', 'E', 'F' };
 
  /**
   * 將字節數組轉換為十六進制字符數組。
   *
   * 因為使用兩個字符表示一個字節,所以返回的char[]長度將是參數byte[]長度的兩倍。
   *
   * @param data
   *      用于轉換為十六進制字符的byte[]
   * @return 包含十六進制字符的char[]
   */
  public static char[] encodeHex(final byte[] data) {
    return encodeHex(data, true);
  }
 
  /**
   * 將字節數組轉換為十六進制字符數組。
   *
   * 因為使用兩個字符表示一個字節,所以返回的char[]長度將是參數byte[]長度的兩倍。
   *
   * @param data
   *      用于轉換為十六進制字符的byte[]
   * @param toLowerCase
   *      <code>true</code> 傳換成小寫格式 , <code>false</code> 傳換成大寫格式
   * @return 包含十六進制字符的char[]
   */
  public static char[] encodeHex(final byte[] data, final boolean toLowerCase) {
    return encodeHex(data, toLowerCase ? DIGITS_LOWER : DIGITS_UPPER);
  }
 
  /**
   * 將字節數組轉換為十六進制字符數組。
   *
   * 因為使用兩個字符表示一個字節,所以返回的char[]長度將是參數byte[]長度的兩倍。
   *
   * @param data
   *      用于轉換為十六進制字符的byte[]
   * @param toDigits
   *      用于控制輸出的字母表
   * @return 包含十六進制字符的char[]
   */
  protected static char[] encodeHex(final byte[] data, final char[] toDigits) {
    int l = data.length;
    char[] out = new char[l << 1];
    // two characters form the hex value.
    for (int i = 0, j = 0; i < l; i++) {
      out[j++] = toDigits[(0xF0 & data[i]) >>> 4];
      out[j++] = toDigits[0x0F & data[i]];
    }
    return out;
  }
 
  /**
   * 將字節數組轉換為十六進制字符串。
   *
   * 因為使用兩個字符表示一個字節,所以返回的的字符串長度將是參數byte[]長度的兩倍。
   *
   * @param data
   *      用于轉換為十六進制字符的byte[]
   * @return 十六進制字符串
   */
  public static String encodeHexStr(final byte[] data) {
    return encodeHexStr(data, true);
  }
 
  /**
   * 將字節數組轉換為十六進制字符串。
   *
   * 因為使用兩個字符表示一個字節,所以返回的的字符串長度將是參數byte[]長度的兩倍。
   *
   * @param data
   *      用于轉換為十六進制字符的byte[]
   * @param toLowerCase
   *      <code>true</code> 傳換成小寫格式 , <code>false</code> 傳換成大寫格式
   * @return 十六進制字符串
   */
  public static String encodeHexStr(byte[] data, boolean toLowerCase) {
    return encodeHexStr(data, toLowerCase ? DIGITS_LOWER : DIGITS_UPPER);
  }
 
  /**
   * 將字節數組轉換為十六進制字符串。
   *
   * 因為使用兩個字符表示一個字節,所以返回的的字符串長度將是參數byte[]長度的兩倍。
   *
   * @param data
   *      用于轉換為十六進制字符的byte[]
   * @param toDigits
   *      用于控制輸出的字母表
   * @return 十六進制字符串
   */
  protected static String encodeHexStr(byte[] data, char[] toDigits) {
    return new String(encodeHex(data, toDigits));
  }
 
  /**
   * 將十六進制字符數組轉換為字節數組
   *
   * @param data
   *      十六進制char[]
   * @return byte[]
   * @throws RuntimeException
   *       如果源十六進制字符數組的長度是奇數,將拋出運行時異常
   */
  public static byte[] decodeHex(char[] data) {
    int len = data.length;
 
    if ((len & 0x01) != 0) {
      throw new RuntimeException("Odd number of characters.");
    }
 
    // 一個byte對應兩個十六進制字符,則將byte[]大小設置為char[]大小的一半
    byte[] out = new byte[len >> 1];
 
    // two characters form the hex value.
    for (int i = 0, j = 0; j < len; i++) {
      int f = toDigit(data[j], j) << 4;
      j++;
      f = f | toDigit(data[j], j);
      j++;
      out[i] = (byte) (f & 0xFF);
    }
 
    return out;
  }
 
  /**
   * 將十六進制字符轉換成一個整數。
   *
   * @param ch
   *      要轉換成整數的字符
   * @param index
   *      字符在字符數組中的位置
   * @return 一個整數
   * @throws RuntimeException
   *       當ch不是一個合法的十六進制字符時,拋出該異常
   */
  protected static int toDigit(final char ch, final int index) {
    final int digit = Character.digit(ch, 16);
    if (digit == -1) {
      throw new RuntimeException("Illegal hexadecimal character " + ch + " at index " + index);
    }
    return digit;
  }
 
  public static void main(String[] args) {
    String srcStr = "HelloWorld!";
    String encodeStr = encodeHexStr(srcStr.getBytes(), false);
    String decodeStr = new String(decodeHex(encodeStr.toCharArray()));
    System.out.println("源字符串:" + srcStr);
    System.out.println("字符串編碼為十六進制:" + encodeStr);
    System.out.println("十六進制解碼為字符串:" + decodeStr);
  }
 
}

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 双性精h调教灌尿打屁股的文案 | 午夜精品福利影院 | 天堂成人一区二区三区 | 精品欧美一区二区精品久久 | 午夜神马电影网 | a级高清免费毛片av在线 | 国产一精品久久99无吗一高潮 | 999精品久久久 | 国产91亚洲精品久久久 | 成人免费毛片在线观看 | 精品一区二区三区在线观看视频 | 欧美成年私人网站 | 国产午夜精品一区二区三区不卡 | 成人免费在线网 | 日本a∨精品中文字幕在线 国产精品片www48888 | 中文字幕免费在线看 | 久久久婷婷一区二区三区不卡 | 日本一道aⅴ不卡免费播放 日日草夜夜操 | 亚洲国产在 | 日本欧美一区二区 | 在线播放视频一区二区 | 性盈盈盈影院 | 免费国产一级淫片 | 老师你怎么会在这第2季出现 | 欧美一级xxx| 在线播放av片| 久久久国产视频 | 欧美老外a级毛片 | 黄色网址入口 | 一级爱片| 性色av一区二区三区在线观看 | 在线看一区二区三区 | www.99av | 午夜小电影 | 全网免费毛片 | 久草视频在线资源 | xfplay噜噜av| 成人国产免费观看 | 久久精品a一级国产免视看成人 | 一本在线高清码电影 | 成人精品视频在线 |