Шестнадцатеричный номер (не шестнадцатеричное значение ASCII) для строки в VB.NET - PullRequest
6 голосов
/ 20 сентября 2010

Я пытался найти это, но большинство людей просто хотят преобразовать шестнадцатеричные значения в их эквиваленты ASCII. Это не то, что я хочу сделать.

Я смотрю, есть ли в VB.NET простая встроенная функция для этого:

    Private Function NibbleToString(ByVal Nibble As Byte) As String
    Dim retval As String = String.Empty
    Select Case Nibble

        Case &H0
            retval = "0"
        Case &H1
            retval = "1"
        Case &H2
            retval = "2"
        Case &H3
            retval = "3"
        Case &H4
            retval = "4"
        Case &H5
            retval = "5"
        Case &H6
            retval = "6"
        Case &H7
            retval = "7"
        Case &H8
            retval = "8"
        Case &H9
            retval = "9"
        Case &HA
            retval = "A"
        Case &HB
            retval = "B"
        Case &HC
            retval = "C"
        Case &HD
            retval = "D"
        Case &HE
            retval = "E"
        Case &HF
            retval = "F"
    End Select

    Return retval
End Function

Есть ли более элегантный способ выполнить то же самое, что и этот код?

Ответы [ 2 ]

7 голосов
/ 20 сентября 2010

Используйте ToString с указателем формата X :

Dim b As Byte = &HA3
Console.WriteLine(b.ToString("X"))    ' displays "A3"

Dim i As Integer = &H12AB89EF
Console.WriteLine(i.ToString("X"))    ' displays "12AB89EF"

И если по какой-то причине вы просто хотите покусывать за раз, вы можете просто замаскировать / сместить различные биты числа заранее:

Dim b As Byte = &H5E
Console.WriteLine((b And &HF).ToString("X"))    ' displays "E" (low nibble)
Console.WriteLine((b >> 4).ToString("X"))       ' displays "5" (high nibble)
2 голосов
/ 20 сентября 2010

как функция

<FlagsAttribute()> _
Public Enum whichNibble As Integer
    'byte
    '7654 3210
    ' msn  lsn
    lsn = 1
    msn = 2
    both = lsn Or msn
End Enum

Private Function GetNibble(ByVal aByte As Byte, _
                          Optional ByVal whNib As whichNibble = whichNibble.lsn) As String
    Select Case whNib
        Case whichNibble.both
            Return aByte.ToString("X2")
        Case whichNibble.lsn
            Return (aByte And &HF).ToString("X")
        Case whichNibble.msn
            Return ((aByte >> 4) And &HF).ToString("X")
    End Select
End Function
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...