将 HexString 转换为字节,然后返回到 HexString 添加额外的零
Converting HexString to Bytes and then Back to HexString adds extra zero
我正在将 64 bit/16 十六进制字符串转换为字节数组,但似乎转换效果不佳。
我究竟做错了什么?
所以我的字符串是 FEDCBA9876543210
但是当我将它转换为 byteArray
时它是 9 个字节而不是 8 个字节!
将其转换回来后,我得到 00FEDCBA9876543210
我做错了什么。这个 thread 被用在我的函数中。
这是我的转换代码。
public static byte[] hexStringToByteArray(String str) {
int len = str.length();
byte [] data = new byte[len/2];
for (int i=0; i<len; i+=2) {
data[i/2] = (byte) ((Character.digit(str.charAt(i), 16) << 4) +
(Character.digit(str.charAt(i+1), 16)));
}
return data;
}
这是转换回来的代码。
public static String byteArrayToHexString(byte [] bytes) {
char[] hexArray = "0123456789abcdef".toCharArray();
char[] hexChars = new char[bytes.length * 2];
for (int i=0; i<bytes.length; i++) {
int c = bytes[i] & 0xFF;
hexChars[i*2] = hexArray[c >>> 4];
hexChars[i*2 + 1] = hexArray[c & 0x0F];
}
return new String(hexChars);
}
我犯了一个可怕的错误。
转换后的某个地方,我正在使用 BigInteger.toByteArray 转换重新转换 this 的 BigInteger 值。 (不要问我为什么!!)以前工作的遗留问题。
根据文档 here,转换为字节数组会添加一个符号位。
删除链接后,我现在有 8 个字节。 :)
this.vendingKey = Conversions.hexStringToByteArray(vendingKey);
BigInteger bigInteger = new BigInteger(vendingKey, 16);
this.vendingKey = bigInteger.toByteArray();
我正在将 64 bit/16 十六进制字符串转换为字节数组,但似乎转换效果不佳。
我究竟做错了什么?
所以我的字符串是 FEDCBA9876543210
但是当我将它转换为 byteArray
时它是 9 个字节而不是 8 个字节!
将其转换回来后,我得到 00FEDCBA9876543210
我做错了什么。这个 thread 被用在我的函数中。 这是我的转换代码。
public static byte[] hexStringToByteArray(String str) {
int len = str.length();
byte [] data = new byte[len/2];
for (int i=0; i<len; i+=2) {
data[i/2] = (byte) ((Character.digit(str.charAt(i), 16) << 4) +
(Character.digit(str.charAt(i+1), 16)));
}
return data;
}
这是转换回来的代码。
public static String byteArrayToHexString(byte [] bytes) {
char[] hexArray = "0123456789abcdef".toCharArray();
char[] hexChars = new char[bytes.length * 2];
for (int i=0; i<bytes.length; i++) {
int c = bytes[i] & 0xFF;
hexChars[i*2] = hexArray[c >>> 4];
hexChars[i*2 + 1] = hexArray[c & 0x0F];
}
return new String(hexChars);
}
我犯了一个可怕的错误。 转换后的某个地方,我正在使用 BigInteger.toByteArray 转换重新转换 this 的 BigInteger 值。 (不要问我为什么!!)以前工作的遗留问题。
根据文档 here,转换为字节数组会添加一个符号位。
删除链接后,我现在有 8 个字节。 :)
this.vendingKey = Conversions.hexStringToByteArray(vendingKey);
BigInteger bigInteger = new BigInteger(vendingKey, 16);
this.vendingKey = bigInteger.toByteArray();