конвертировать отрицательное десятичное число в HEX - PullRequest
2 голосов
/ 27 марта 2011

Должен признать, что я мало что помню о школе и так далее (25 лет назад). В любом случае, у меня есть некоторые значения в десятичном формате, которые мне нужно конвертировать в HEX. Я использую Excel, но я мог бы написать функцию в VBA при необходимости (или сделать это с помощью кода в VB.NET).

Я уже знаю, как должен выглядеть HEX-результат (другой источник), но мне нужно использовать Excel, чтобы точно получить этот результат. Источник десятичного ввода, а также результат (справа) шестнадцатеричного результата взят из Linux-системы, если это важно знать.

Кажется, что положительные числа преобразуются правильно, тогда как отрицательные числа вызывают головную боль в том смысле, что Excel добавляет в начало HEX две дополнительные буквы (две FF) по сравнению с желаемым результатом.

Пример: Десятичный ввод: -524288

Правильный HEX-вывод, который я должен получить: FFF80000

Используя формулу в Excel, я получаю: FFFFF80000 (Я получаю 2 FF дополнительно в начале HEX-вывода)

Другой пример:

Десятичный ввод: -29446758

должно быть FE3EAD9A

но в Excel я получаю FFFE3EAD9A

Кажется, я всегда получаю 2 дополнительных FF в HEX-выходе.

Может кто-нибудь объяснить (простым способом), почему я получаю 2 дополнительных FF и могу ли я их безопасно удалить?

Ответы [ 2 ]

4 голосов
/ 27 марта 2011

В Excel =DEC2HEX по умолчанию возвращает 10 символов.

Если вы хотите получить только 8, в качестве вопроса предложите использовать:

=DEC2HEX(A1,8)

Тем не менее, если у вас нет проблем с совместимостью, вы можете оставить номера по умолчанию. Помните, что символ «F» действует для отрицательных чисел как символ заполнения (так же, как «0» для положительных чисел).

Редактировать

Сказанное выше не подходит для негативов, как вы указали в своем комментарии.

Следующие работы:

=RIGHT(DEC2HEX(A1),8)
0 голосов
/ 27 марта 2011

Я не совсем уверен, что вы делаете, потому что вы не включили свою формулу.Я предполагаю, что вы используете функцию, подобную этой:

=DEC2HEX(A1)

Хотя она имеет необязательные параметры для управления количеством возвращаемых цифр, она не работает, когда ввод отрицательный.

Вместо этого вы должны использовать немного VBA:

Public Function DecToHex(val As Variant) As Variant

DecToHex = Hex(val)

End Function
...