我正在尝试实现从Base64到Hex的字符串转换,这必须产生与本网站相同的结果。这意味着,例如(Base64: bACAAAAAAAA=)被解译为(十六进制:6c008000000000)。这一实现产生正确的输出。所以我试着用Java实现等价的
private static String base64ToHex(String input) {
byte[] raw = Base64.getDecoder().decode(input.getBytes());
String result = "";
for (int i = 0; i < raw.length; i++) {
String hex = Integer.toString(raw[i], 16);
result += (hex.length() == 2 ? hex : '0' + hex);
}
return result.toUpperCase();
}不幸的是,这并没有提供所需的输出。所以你能告诉我我错过了什么吗?
发布于 2020-10-29 11:12:19
尝试下面-你需要解码,而不是编码。只考虑解码后的值,忽略符号部分。也就是说,使用Math.abs()只取绝对值。
private static String base64ToHex(String input) {
byte[] raw = Base64.getDecoder().decode(input.getBytes());
String result = "";
for (int i = 0; i < raw.length; i++) {
String hex = Integer.toString(Math.abs(raw[i]), 16);
result += (hex.length() == 2 ? hex : '0' + hex);
}
return result.toUpperCase();
}发布于 2020-10-29 11:32:56
private static String base64ToHex(String input) {
byte[] raw = Base64.getDecoder().decode(
input.getBytes(StandardCharsets.US_ASCII));
StringBuilder result = new StringBuilder(raw.length * 2);
for (byte b : raw) {
result.append(String.format("%02X", b & 0xFF));
}
return result.toString();
}问题是,java byte被签名了,因此出现了掩蔽& 0xFF。
https://stackoverflow.com/questions/64589689
复制相似问题