将奇数长度的java字符串转换为十六进制字节数组
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了将奇数长度的java字符串转换为十六进制字节数组相关的知识,希望对你有一定的参考价值。
我需要将字符串转换为十六进制字节数组,我的代码是:
public static byte[] stringToHex(final String buf)
{
return DatatypeConverter.parseHexBinary(buf);
}
根据java doc将字符串转换为Hex DatatypeConverter
use以下实现
public byte[] parseHexBinary(String s) {
final int len = s.length();
// "111" is not a valid hex encoding.
if (len % 2 != 0) {
throw new IllegalArgumentException("hexBinary needs to be even-length: " + s);
}
byte[] out = new byte[len / 2];
for (int i = 0; i < len; i += 2) {
int h = hexToBin(s.charAt(i));
int l = hexToBin(s.charAt(i + 1));
if (h == -1 || l == -1) {
throw new IllegalArgumentException("contains illegal character for hexBinary: " + s);
}
out[i / 2] = (byte) (h * 16 + l);
}
return out;
}
这意味着只有具有偶数长度的字符串才能被转换。但是在php中没有这样的约束。例如php中的代码:
echo pack("H*", "250922f67dcbc2b97184464a91e7f8f");
而在java中
String hex = "250922f67dcbc2b97184464a91e7f8f";
System.out.println(stringToHex(hex));//my method that was described earlier
为什么以下字符串在php中是合法的?
答案
PHP只是在字符数为奇数的情况下添加最终的0
。
这两个
echo pack("H*", "48454C50");
echo pack("H*", "48454C5");
让
HELP
以上是关于将奇数长度的java字符串转换为十六进制字节数组的主要内容,如果未能解决你的问题,请参考以下文章
在 Java 中,如何将字节数组转换为十六进制数字字符串,同时保持前导零? [复制]
在 Java 中,如何将字节数组转换为十六进制数字字符串,同时保持前导零? [复制]