gpt4 book ai didi

java - 将十六进制字符串转换为字节数组

转载 作者:行者123 更新时间:2023-12-04 10:27:05 25 4
gpt4 key购买 nike

我写了一个将十六进制字符串转换成字节数组的程序,例如"2e65"生产 [2,14,6,5] .

有没有办法用更少的代码行或不使用 ASCII 表值来做到这一点。

public static byte[] stringToData( String dataString) {
byte [] hexStringToByteArr = new byte[dataString.length()];
for ( int i = 0; i < dataString.length(); i++) {
char c = dataString.charAt(i);
if ( c == 48 ) { hexStringToByteArr[i] = 0;}
if ( c == 49 ) { hexStringToByteArr[i] = 1;}
if ( c == 50 ) { hexStringToByteArr[i] = 2;}
if ( c == 51 ) { hexStringToByteArr[i] = 3;}
if ( c == 52 ) { hexStringToByteArr[i] = 4;}
if ( c == 53 ) { hexStringToByteArr[i] = 5;}
if ( c == 54 ) { hexStringToByteArr[i] = 6;}
if ( c == 55 ) { hexStringToByteArr[i] = 7;}
if ( c == 56 ) { hexStringToByteArr[i] = 8;}
if ( c == 57 ) { hexStringToByteArr[i] = 9;}
if ( c == 97 ) { hexStringToByteArr[i] = 10;}
if ( c == 98 ) { hexStringToByteArr[i] = 11;}
if ( c == 99 ) { hexStringToByteArr[i] = 12;}
if ( c == 100 ) {hexStringToByteArr[i] = 13;}
if ( c == 101 ) {hexStringToByteArr[i] = 14;}
if ( c == 102 ) {hexStringToByteArr[i] = 15;}
}
return hexStringToByteArr;
}

public static void main(String [] args) {
String pracString = "2e65";
System.out.println(Arrays.toString(stringToData(pracString)));
}

最佳答案

"2e65"十六进制表示两个字节( 2e ,对应于 46 十进制, 65 ,对应于 101 十进制)。获取 byte[]包含两个字节,您可以使用 BigInteger :

String hex = "2e65";
byte[] b = new BigInteger(hex, 16).toByteArray();
System.out.println(Arrays.toString(b));

上面代码片段的输出是:
[46, 101]

相反,如果您想将四个十六进制数字中的每一个都转换为 byte并将它们存储在 byte[] 中,那么您可以使用 Character#digit 同时迭代每个 charString :
String hex = "2e65";
byte[] b = new byte[hex.length()];

for (int i = 0; i < b.length; i++) {
b[i] = (byte) Character.digit(hex.charAt(i), 16);
}

System.out.println(Arrays.toString(b));

上面代码片段的输出是:
[2, 14, 6, 5]

关于java - 将十六进制字符串转换为字节数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60590698/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com