根据此处提出的另一个问题Split a Hex String without spaces and flip it,我在这里更清楚地写了这个新问题。
我有一个像这样的十六进制字符串:
Hex_string = 2B00FFEC
我需要将十六进制字符串的顺序更改为从最新字符开始,所以这将是这样的:
Fliped_hex_string = ECFF002B
在另一个问题中,我询问了一种使用 .split() 方法来实现此目的的方法。但是应该有另一种方法可以更好地实现这一点。
根据此处提出的另一个问题Split a Hex String without spaces and flip it,我在这里更清楚地写了这个新问题。
我有一个像这样的十六进制字符串:
Hex_string = 2B00FFEC
我需要将十六进制字符串的顺序更改为从最新字符开始,所以这将是这样的:
Fliped_hex_string = ECFF002B
在另一个问题中,我询问了一种使用 .split() 方法来实现此目的的方法。但是应该有另一种方法可以更好地实现这一点。
尽可能简单
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
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
解析器以允许否定。
您可以执行以下操作:
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);
}
如果需要,这也可以扩展到更长的字符串
也许您应该尝试以下简单的方法:
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
下次您提出问题时,也许您应该向我们展示一些您编写的用于解决问题的代码(然后问我们为什么您的代码不起作用,而不是您的问题)。你不会从我们那里学到任何东西,只是在你不知道它们是如何工作的情况下提供答案。
这种方法似乎做你想做的
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);
}
这对我有用
StringBuilder lsbToMsb=new StringBuilder();
for(int i=input.length();i>0;i-=2)
{
lsbMsb.append(lsbToMsb.substring(i-2,i));
}
String lsbMsb=lsbMsb.toString();