5

根据此处提出的另一个问题Split a Hex String without spaces and flip it,我在这里更清楚地写了这个新问题。

我有一个像这样的十六进制字符串:

Hex_string = 2B00FFEC

我需要将十六进制字符串的顺序更改为从最新字符开始,所以这将是这样的:

Fliped_hex_string = ECFF002B

在另一个问题中,我询问了一种使用 .split() 方法来实现此目的的方法。但是应该有另一种方法可以更好地实现这一点。

4

6 回答 6

8

尽可能简单

    String s = "2B00FFEC";
    StringBuilder  result = new StringBuilder();
    for (int i = 0; i <=s.length()-2; i=i+2) {
        result.append(new StringBuilder(s.substring(i,i+2)).reverse());
     }
    System.out.println(result.reverse().toString());   //op :ECFF002B
于 2013-09-16T15:00:15.330 回答
5

OP 在 comments 中将字符长度限制为正好 8 个字符

一个纯数字的答案(灵感来自转换字节顺序的成语);保存往返字符串

n是一个int

int m = ((n>>24)&0xff) |       // byte 3 to byte 0
        ((n<<8)&0xff0000) |    // byte 1 to byte 2
        ((n>>8)&0xff00) |      // byte 2 to byte 1
        ((n<<24)&0xff000000);  // byte 0 to byte 3

如果您需要将其转换为十六进制,请使用

String s = Integer.toHexString(m);

如果您需要n从十六进制设置,请使用

int n = (int)Long.parseLong(hex_string, 16);

hex_string你的初始字符串在哪里。您需要通过Long解析器以允许否定。

于 2013-09-16T14:29:47.127 回答
5

您可以执行以下操作:

String a = "456789AB";
char[] ca = a.toCharArray();
StringBuilder sb = new StringBuilder(a.length());
for (int i = 0; i<a.length();i+=2)
{
  sb.insert(0, ca, i, 2);
}

如果需要,这也可以扩展到更长的字符串

于 2013-09-16T14:46:04.407 回答
0

也许您应该尝试以下简单的方法:

public static String flip(final String hex){
    final StringBuilder builder = new StringBuilder(hex.length());
    for(int i = hex.length(); i > 1; i-=2)
        builder.append(hex.substring(i-2, i));
    return builder.toString();
}

public static void main(String args[]){
    System.out.println(flip("2B00FFEC"));
}

输出是:ECFF002B

下次您提出问题时,也许您应该向我们展示一些您编写的用于解决问题的代码(然后问我们为什么您的代码不起作用,而不是您的问题)。你不会从我们那里学到任何东西,只是在你不知道它们是如何工作的情况下提供答案。

于 2013-09-16T14:42:43.093 回答
0

这种方法似乎做你想做的

String changeHexOrder(String s) {
    char[] arr = s.toCharArray();
    char tmp;
    //change positions of [i, i + 1 , , , , , ,length - i - 2, length - i - 1]
    for (int i = 0; i < arr.length / 2; i += 2) {
        tmp = arr[i];
        arr[i] = arr[arr.length-i-2];
        arr[arr.length-i-2] = tmp;

        tmp = arr[i+1];
        arr[i+1] = arr[arr.length-i-1];
        arr[arr.length-i-1] = tmp;
    }
    return new String(arr);
}
于 2013-09-16T14:46:14.540 回答
0

这对我有用

    StringBuilder lsbToMsb=new StringBuilder();

    for(int i=input.length();i>0;i-=2)
    {
        lsbMsb.append(lsbToMsb.substring(i-2,i));
    }


    String lsbMsb=lsbMsb.toString();
于 2018-07-16T07:34:26.653 回答