2015-12-01 4 views
2

Мне нужно принять целочисленное значение и преобразовать его так, чтобы, когда он представлен в шестнадцатеричном формате, цифры меняются на противоположные. Например:Обратный порядок шестнадцатеричных цифр

Dim a As Integer = &H4321 
Dim a_changedorder As Integer = ReverseHexDigits(a) 
Console.Writeline(a_changedorder.ToString("X4")) ' Should output 1234 

Как я могу реализовать метод ReverseHexDigits, который работает, как это?

В качестве второго примера &H4F2A должен стать &HA2F4.

+0

'Dim A As Integer = 0x4321' не будет компилировать, потому что это не так, как шестигранный обозначается в VB:' Dim A As Integer = & H4321' – Plutonix

+1

Вы должны выполнить эти изменения, рассматривая переменную как строку. Чтобы получить шестнадцатеричную форму целого числа (строка, которую вы будете изменять), вы можете использовать функцию 'Hex'. – varocarbas

+3

'Как я могу изменить порядок чисел 'его номер, вы действительно будете изменять * значение *. когда вы присваиваете '& H4321' взгляд на значение' a', оно должно быть 17 185 в базе 10 – Plutonix

ответ

1

(я действительно не могу понять, почему вы хотели бы это сделать ... но) Просто преобразовать числовое значение в строку, reverse it затем преобразовать обратно в числовое значение:

Dim a As UShort = &H4321 

    Dim hexCharArray As Char() = a.ToString("X4").ToCharArray 
    Array.Reverse(hexCharArray) 
    Dim hexStringReversed = New String(hexCharArray) 

    Dim a_changedorder As UShort = Convert.ToUInt16(hexStringReversed, 16) 

ПОДТВЕРЖДАЕТ выход правильно:

Debug.WriteLine(a_changedorder.ToString("X4")) '1234 

Примечание вы должны использовать UShort, как у вас есть только два байта, Integer подписан и 4 байта

+1

Это именно то, что я искал и решил свою проблему! Настолько совершенен.Мой английский не очень хорош и попытался объяснить это с помощью этого примера. Большое спасибо @Matt Wilko работает как чемпион! – VbQuestionGuy

3

В то время как метод Мэтта будет работать, довольно малоэффективно преобразовать целое число в шестнадцатеричную строку, отменить порядок символов в строке и затем снова проанализировать ее обратно в целое число. Если эффективность важна, и вам нужно всего лишь поменять местами тетрады в двух байтовое целое число, то следующее будет работать:

Public Function ReverseHexDigits(input As Integer) As Integer 
    Return ((input And &HF) << 12) Or 
     ((input And &HF0) << 4) Or 
     ((input And &HF00) >> 4) Or 
     ((input And &HF000) >> 12) 
End Function 

Однако, это сбивает с толку, так как он работает только на нижних двух байтов. Было бы понятно, если бы она работала на UShort переменных вместо:

Public Function ReverseHexDigits(input As UShort) As UShort 
    Return ((input And CUShort(&HF)) << 12) Or 
     ((input And CUShort(&HF0)) << 4) Or 
     ((input And CUShort(&HF00)) >> 4) Or 
     ((input And CUShort(&HF000)) >> 12) 
End Function