2013-09-16 4 views
1

В соответствии с другим вопросом, сделанным здесь Split a Hex String without spaces and flip it, я пишу этот новый вопрос более четко здесь.Flip a Hex String

У меня есть шестнадцатеричная строка, как это:

Hex_string = 2B00FFEC 

Что мне нужно изменить порядок шестнадцатеричной строки для запуска из последних символов, так что это будет так:

Fliped_hex_string = ECFF002B 

В другом вопросе я попросил сделать это, используя метод .split(). Но должен быть другой способ добиться этого лучше.

+0

Что делает представление Hex_string; длинный (то есть 64 бит)? – Bathsheba

+0

Простая строка – masmic

+0

Всегда четное количество символов? – Bathsheba

ответ

4

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); 

wher e hex_string - это ваша начальная строка. Вам нужно пройти через парсер Long, чтобы разрешить негативы.

+0

Извините за мое невежество @ Батшеба, я немного новичок в андроиде, но я не знаю, как это использовать. Где я использую строку 'Hex_string'? – masmic

+0

@ maxmic_87, теперь я вставляю код установки в конце ответа. – Bathsheba

+0

Просто протестирован и отлично работает! Спасибо – masmic

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

В следующий раз вы задаете вопрос, возможно, вы должны показать нам код, вы написали, используемый в чтобы решить вашу проблему (а затем спросите нас, почему ваш код не работает, а не ваша проблема). Вы не узнаете что-нибудь от нас, просто предоставляя ответы, не зная, как они работают.

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); 
} 

Это также распространяется и на более длинных строк при необходимости

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); 
} 
3

Как просто, как вы можете это

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 
+1

приятный один простой n короткий –