在Java中如何实现十六进制字符串逐字节反转?如e905c878转78c805e9
Java实现十六进制字符串逐字节反转方案
以下实现完全对齐你给出的Rust代码逻辑,分为「十六进制字符串转字节数组」「反转字节数组」「字节数组转回十六进制字符串」三个核心步骤:
完整可运行代码
public class HexReverseDemo { public static void main(String[] args) { // 测试示例1:输入e905c878 预期输出78c805e9 String testInput1 = "e905c878"; String result1 = reverseHexByByte(testInput1); System.out.println(result1); // 测试Rust示例中的输入d59c168e05df4757 预期输出5747df058e169cd5 String testInput2 = "d59c168e05df4757"; String result2 = reverseHexByByte(testInput2); System.out.println(result2); } /** * 逐字节反转十六进制字符串 * @param hex 输入的十六进制字符串(长度必须为偶数) * @return 反转后的十六进制字符串 */ public static String reverseHexByByte(String hex) { // 1. 十六进制字符串转字节数组,对应Rust代码中的parse_hex方法 byte[] originBytes = hexStringToByteArray(hex); // 2. 反转字节数组,对应Rust代码中的iter().rev()遍历插入逻辑 int len = originBytes.length; byte[] reversedBytes = new byte[len]; for (int i = 0; i < len; i++) { reversedBytes[i] = originBytes[len - 1 - i]; } // 3. 反转后的字节数组转回十六进制字符串 return bytesToHex(reversedBytes); } // 十六进制字符串转字节数组工具方法 private static byte[] hexStringToByteArray(String hex) { int length = hex.length(); byte[] data = new byte[length / 2]; for (int i = 0; i < length; i += 2) { data[i / 2] = (byte) ((Character.digit(hex.charAt(i), 16) << 4) + Character.digit(hex.charAt(i + 1), 16)); } return data; } // 字节数组转十六进制字符串工具方法 private static String bytesToHex(byte[] bytes) { StringBuilder sb = new StringBuilder(); for (byte b : bytes) { // 如需输出大写十六进制,将%02x改为%02X即可 sb.append(String.format("%02x", b)); } return sb.toString(); } }
注意事项
- 输入的十六进制字符串必须为偶数长度,使用前建议先做合法性校验,避免数组越界
- 代码默认输出小写十六进制字符,按需修改格式符即可切换为大写
内容的提问来源于stack exchange,提问作者nick
相关产品推荐
相关产品推荐

