Как Вы преобразовываете шестнадцатеричное число в десятичное число с помощью VB.NET?

https://docs.fast.ai/text.learner.html#language_model_learner

Необходимо определить архитектуру, например:

language_model_learner(data, AWD_LSTM, drop_mult=0.5)

11
задан Peter Mortensen 24 April 2012 в 13:42
поделиться

6 ответов

Это - 24-байтовое (192-разрядное) число; какое значение Вы ожидаете?

Обратите внимание, что можно использовать Convert сделать большую безобразную работу здесь - например (в C#):

    string hex = "A14152464C203230304232323020572F544947455234352E";
    byte[] raw = new byte[hex.Length / 2];
    for (int i = 0; i < raw.Length ; i++)
    {
        raw[i] = Convert.ToByte(hex.Substring(i * 2,2), 16);
    }

Как Вы добираетесь от raw к числу зависит от того, что Вы думаете, что число...

Любезность перевода Visual Basic Отражателя.NET (хотя "-1" нечетные взгляды):

Dim hex As String = "A14152464C203230304232323020572F544947455234352E"
Dim raw As Byte() = New Byte((hex.Length / 2)  - 1) {}
Dim i As Integer
For i = 0 To raw.Length - 1
    raw(i) = Convert.ToByte(hex.Substring((i * 2), 2), &H10)
Next i
6
ответ дан 3 December 2019 в 02:41
поделиться

Для шестнадцатеричных значений, которые на самом деле не требуют, чтобы класс сверхбольшого числа работал с, можно использовать нормальную функцию преобразования, но снабдить префиксом число "&H". VB интерпретирует "&H" в тексте как значение, "это - шестнадцатеричное число", точно так же, как это делает в коде.

dim n = Cint("&H" & text)
16
ответ дан 3 December 2019 в 02:41
поделиться

Это преобразует Вашу строку в массив байтов:

Dim hex As String = "A14152464C203230304232323020572F544947455234352E"

Dim len As Integer = hex.Length \ 2
Dim data(len - 1) As Byte
For i As Integer = 0 to len - 1
   data(i) = Convert.ToByte(hex.Substring(i * 2, 2), 16)
Next
1
ответ дан 3 December 2019 в 02:41
поделиться
    Dim hex As String
    hex = "A14152464C203230304232323020572F544947455234352E"

    Dim dec As Long
    Dim hexpart As String
    For x As Integer = 1 To (hex.Length / 2)

        hexpart = hex.Substring((x * 2) - 2, 2)
        dec = Int32.Parse(hexpart, System.Globalization.NumberStyles.HexNumber)

        Debug.Print("Hex = " + hex + ",HexPart = " + hexpart + ", Dec = " + dec.ToString + Environment.NewLine)
    Next

Это не будет работать на Десятичное число, и Шестнадцатеричное число является слишком длинным для целого числа..., но Вы получаете идею. Вы могли разделить его и переобъединение.

Hex = A14152464C203230304232323020572F544947455234352E,HexPart = A1, Dec = 161
Hex = A14152464C203230304232323020572F544947455234352E,HexPart = 41, Dec = 65
Hex = A14152464C203230304232323020572F544947455234352E,HexPart = 52, Dec = 82
Hex = A14152464C203230304232323020572F544947455234352E,HexPart = 46, Dec = 70
Hex = A14152464C203230304232323020572F544947455234352E,HexPart = 4C, Dec = 76
Hex = A14152464C203230304232323020572F544947455234352E,HexPart = 20, Dec = 32
Hex = A14152464C203230304232323020572F544947455234352E,HexPart = 32, Dec = 50
Hex = A14152464C203230304232323020572F544947455234352E,HexPart = 30, Dec = 48
Hex = A14152464C203230304232323020572F544947455234352E,HexPart = 30, Dec = 48
Hex = A14152464C203230304232323020572F544947455234352E,HexPart = 42, Dec = 66
Hex = A14152464C203230304232323020572F544947455234352E,HexPart = 32, Dec = 50
Hex = A14152464C203230304232323020572F544947455234352E,HexPart = 32, Dec = 50
Hex = A14152464C203230304232323020572F544947455234352E,HexPart = 30, Dec = 48
Hex = A14152464C203230304232323020572F544947455234352E,HexPart = 20, Dec = 32
Hex = A14152464C203230304232323020572F544947455234352E,HexPart = 57, Dec = 87
Hex = A14152464C203230304232323020572F544947455234352E,HexPart = 2F, Dec = 47
Hex = A14152464C203230304232323020572F544947455234352E,HexPart = 54, Dec = 84
Hex = A14152464C203230304232323020572F544947455234352E,HexPart = 49, Dec = 73
Hex = A14152464C203230304232323020572F544947455234352E,HexPart = 47, Dec = 71
1
ответ дан 3 December 2019 в 02:41
поделиться
Private Function toByte(ByVal Shex As String) As List(Of Byte)
    Const cvtCH As Integer = 2
    Dim retval As New List(Of Byte)
    Dim rmndr As Integer
    rmndr = Shex.Length Mod cvtCH
    If rmndr <> 0 Then Shex = Shex.PadLeft(Shex.Length + cvtCH - rmndr, "0"c)
    For x As Integer = 0 To Shex.Length - 1 Step cvtCH
        retval.Add(Convert.ToByte(Shex.Substring(x, cvtCH), 16))
    Next
    Return retval
End Function
Private Function toU32(ByVal Shex As String) As List(Of UInt32)
    Const cvtCH As Integer = 8
    Dim retval As New List(Of UInt32)
    Dim rmndr As Integer
    rmndr = Shex.Length Mod cvtCH
    If rmndr <> 0 Then Shex = Shex.PadLeft(Shex.Length + cvtCH - rmndr, "0"c)
    For x As Integer = 0 To Shex.Length - 1 Step cvtCH
        retval.Add(Convert.ToUInt32(Shex.Substring(x, cvtCH), 16))
    Next
    Return retval
End Function
Private Function toU64(ByVal Shex As String) As List(Of UInt64)
    Const cvtCH As Integer = 16
    Dim retval As New List(Of UInt64)
    Dim rmndr As Integer
    rmndr = Shex.Length Mod cvtCH
    If rmndr <> 0 Then Shex = Shex.PadLeft(Shex.Length + cvtCH - rmndr, "0"c)
    For x As Integer = 0 To Shex.Length - 1 Step cvtCH
        retval.Add(Convert.ToUInt64(Shex.Substring(x, cvtCH), 16))
    Next
    Return retval
End Function
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    'unsigned 32 bit max = FFFFFFFF
    'unsigned 64 bit max = FFFFFFFF
    'signed 32 bit max = 7FFFFFFF
    'signed 64 bit max = 7FFFFFFF
    Dim hexS As String = "A14152464C203230304232323020572F544947455234352E"
    Dim hexS2 As String = "A14152464C203230304232323020572F54494745523435"
    toByte(hexS)
    toU32(hexS)
    toU64(hexS)
End Sub
1
ответ дан 3 December 2019 в 02:41
поделиться

Запишите тот сами.

Необходимо будет маркировать строку, затем запуститься справа и проложить себе путь оставленные.

int weight = 1;
While Looping
{

  If (token(i) == "F") { DecimalValue += 15 * weight; }
  If (token(i) == "E") { DecimalValue += 14 * weight; }
  If (token(i) == "D") { DecimalValue += 13 * weight; }
  If (token(i) == "C") { DecimalValue += 12 * weight; }
  If (token(i) == "B") { DecimalValue += 11 * weight; }
  If (token(i) == "A") { DecimalValue += 10 * weight; }
  else { DecimalValue += token(i) * weight; }

  weight = weight * 16;
}

Что-то как этот.

1
ответ дан 3 December 2019 в 02:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: