在Java中,如何将十六进制字符串转换为字节[]?
我在Java中使用以下函数将加密字符串转换为十六进制格式:在Java中,如何将十六进制字符串转换为字节[]?,java,hex,Java,Hex,我在Java中使用以下函数将加密字符串转换为十六进制格式: public static String toHex(byte [] buf) { StringBuffer strbuf = new StringBuffer(buf.length * 2); int i; for (i = 0; i < buf.length; i++) { if (((int) buf[i] & 0xff) < 0x10) { st
public static String toHex(byte [] buf) {
StringBuffer strbuf = new StringBuffer(buf.length * 2);
int i;
for (i = 0; i < buf.length; i++) {
if (((int) buf[i] & 0xff) < 0x10) {
strbuf.append("0");
}
strbuf.append(Long.toString((int) buf[i] & 0xff, 16));
}
return strbuf.toString();
}
<>我可以从<代码>(2)<代码>到<代码>(3)< /代码>,但是我该如何从<代码>(3)< /代码>返回到<代码>(2)< /> > <强>接受的答案不考虑前导零,这可能导致问题>/P> 回答它。这取决于您是想看看它是如何完成的,还是只想使用java内置方法。以下是从上述问题中复制的解决方案和答案 选项1:Util方法
public static byte[] hexStringToByteArray(String s) {
int len = s.length();
byte[] data = new byte[len / 2];
for (int i = 0; i < len; i += 2) {
data[i / 2] = (byte) ((Character.digit(s.charAt(i), 16) << 4)
+ Character.digit(s.charAt(i+1), 16));
}
return data;
}
我发现DatatypeConverter.parseHexBinary的成本比:
aa到Ra。一部没有卡马尔·切赫的电影。你可以加入我的聊天室什么是后字节数组?这与字节数组不同吗?如何将二进制/字节字符串转换为十六进制?您的回答帮助了我,感谢+1+1使用Java已经提供的类提供了一行程序选项。对于字符串
56276BE1
,它给了我86、39、107、-31的字节。但另一个用C#编写的应用程序为相同的十六进制字符串提供了86、39、107、225
。哪一个是正确的?两个都是正确的。C#处理字节的方式与Java不同。在Java中,字节值介于-127和127之间,而C#的值介于0到255之间。不过,在Java 9上,内置的一行代码似乎不再那么内置了,因为简单地导入javax.xml.bind.DatatypeConverter
不起作用。这并没有给出我想要的结果,但是dARKpRINCE的响应中的简单的一行方法做到了代码>当我必须将原始数据类型传递给Oracle sprocThe新的BigInteger(s,16).toByteArray()时,这就起作用了代码>不正确。我输入一个34长度的十六进制字符串,输出一个18长度的字节。我想要的是一个17字节的长度,我认为这有时会给出错误的结果。例如,它为A85565ED63B893F5A3EF85D88819D484提供了17个字节。但是它应该是16 bytest,它给出了错误的结果;DarkPrince“util方法”对我来说是正确的。这比DatatypeConverter成本更高,因为Apache commons是一个附加库(依赖项、大小等),而DatatypeConverter是JDK的一部分。
String s="f263575e7b00a977a8e9a37e08b9c215feb9bfb2f992b2b8f11e";
byte[] b = new BigInteger(s,16).toByteArray();
public static byte[] hexStringToByteArray(String s) {
int len = s.length();
byte[] data = new byte[len / 2];
for (int i = 0; i < len; i += 2) {
data[i / 2] = (byte) ((Character.digit(s.charAt(i), 16) << 4)
+ Character.digit(s.charAt(i+1), 16));
}
return data;
}
import javax.xml.bind.DatatypeConverter;
public static String toHexString(byte[] array) {
return DatatypeConverter.printHexBinary(array);
}
public static byte[] toByteArray(String s) {
return DatatypeConverter.parseHexBinary(s);
}
org.apache.commons.codec.binary.Hex(str.toCharArray())