根据此处提出的另一个问题Split a Hex String without spaces and flip it,我在这里更清楚地写下这个新问题。
我有一个像这样的Hex字符串:
Hex_string = 2B00FFEC
我需要的是将Hex字符串的顺序更改为从最新字符开始,所以这将是这样的:
Fliped_hex_string = ECFF002B
在另一个问题中,我问了一种使用.split()方法实现此目的的方法。但应该有另一种方式来更好地实现这一目标。
答案 0 :(得分:5)
OP将字符长度限制为注释中的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
解析器来允许否定。
答案 1 :(得分:4)
尽可能简单
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
答案 2 :(得分:2)
您可以执行以下操作:
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);
}
如果需要,这也延伸到更长的字符串
答案 3 :(得分: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
下次你问一个问题时,也许你应该向我们展示一些你用来解决问题的代码(然后问我们为什么你的代码不起作用,而不是你的问题)。你不会从我们那里学习任何只是在你不知道它们如何工作的情况下提供答案。
答案 4 :(得分: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);
}
答案 5 :(得分:0)
这对我有用
double*