2014-02-21 2 views
-2

У меня есть шестнадцатеричное значение «FF30» в строковом формате. Мне нужно значение дополнения этого номера этого числа. Теперь я делаю, сначала преобразовывая его в двоичный, а затем принимая дополнение 2 . Есть какой-то простой способ.Получение дополнения 2 от значения шестнадцатеричной строки в java

ответ

1

Нужно ли применить операцию дополнения 2 к этому значению или вам нужно просто интерпретировать ее как номер дополнения 2? Если последний, то пропустите вторую строку кода ниже.

Я думаю, что это сработает для вас.

int val = Integer.parseInt("FF30", 16); 
int result = (~val) + 1; 

Update

Поскольку вы подразумеваете в комментариях, что вы хотите результат преобразуется обратно в строку, это просто вопрос вызова «toHexString» и отрубания любых мягких бит, которые были префиксами

String hex = "FF30"; 

    int length = hex.length(); 


    long value = Long.parseLong(hex, 16); // convert hex string to long 
    long result = (~value) + 1;    // compute the 2's complement 

    // convert the result value back to a hex string (keeping the same length and dropping any sign-extension bits) 
    String resultAsString = Long.toHexString(result); 

    // chop off the prefix of the string so the result is the same length as the input 
    int newLength = resultAsString.length(); 
    if (newLength > length) 
    { 
     resultAsString = resultAsString.substring(newLength-length); 
    } 

    System.out.print(resultAsString); 
+0

Здесь первые два байта формирует значение => FF30 H => FF30 H - 1 = FF2F H Теперь возьмите 1 в комплимент выше значение => 00D0 H это на самом деле мне нужно сделать. – user3336240

+0

, но FF30 в строчной форме ... – user3336240

+0

@ user3336240 - вы никогда не заявляли в своем вопросе, что вам нужен результат, чтобы быть строкой. Но я обновил свой ответ на этот счет. – selbie

Смежные вопросы