【问题标题】:How can i reverse a hex to reversed hex in java?java - 如何在java中将十六进制反转为反转十六进制?
【发布时间】:2021-11-26 10:33:00
【问题描述】:

我不知道如何在 java 中将十六进制转换为反转十六进制,如下例所示: e905c878 -> 78c805e9

我看到另一个问题的代码如下,但我不知道如何使用它。

let hex_string: String = String::from("d59c168e05df4757");
let string_to_bytes = parse_hex(&hex_string);
println!("Hex string as bytes: {:?}", string_to_bytes); //Prints: [213, 
156, 22, 142, 5, 223, 71, 87]
let mut bytes_reversed = Vec::new();
for i in string_to_bytes.iter().rev() {
    bytes_reversed.push(i);
}
println!("Bytes reversed: {:x?}", bytes_reversed); //Prints: [57, 47, 
   df, 5, 8e, 16, 9c, d5]

【问题讨论】:

    标签: java hex reverse


    【解决方案1】:

    使用StringBuilder

    StringBuilder sb = new StringBuilder(hexString);
    

    反转字符对:

    for (int i = 0; i < sb.length(); i += 2) {
      char tmp = sb.charAt(i);
      sb.setCharAt(i, sb.charAt(i+1));
      sb.setCharAt(i+1, tmp);
    }
    

    然后把整个事情反过来:

    sb.reverse();
    

    然后构建:

    String reversed = sb.toString();
    

    作为反转对然后反转字符串的替代方法,您可以直接交换字符对:

    for (int i = 0, j = sb.length() - 2; i < j; i += 2, j -= 2) {
      for (int d = 0; d < 2; ++d) {
        char tmp = sb.charAt(i + d);
        sb.setCharAt(i + d, sb.charAt(j + d));
        sb.setCharAt(j + d, tmp);
      }
    }
    

    如果你打算做替代,你真的不需要使用StringBuilder,你可以直接在char[]上操作。 StringBuilder 提供的唯一真正优势是能够自我逆转。


    如果十六进制是固定长度(在您展示的示例中为 8),您也可以这样做:

    String reversed =
        new StringBuilder(8)
            .append(hexString, 6, 8)
            .append(hexString, 4, 6)
            .append(hexString, 2, 4)
            .append(hexString, 0, 2)
            .toString();
    

    【讨论】:

      猜你喜欢
      • 2018-07-26
      • 1970-01-01
      • 2017-10-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-06
      • 1970-01-01
      相关资源
      最近更新 更多