2009-03-13 11 views
11

Onaltılıyı VB.NET numaralı bir ondalığa dönüştürmem gerekiyor. C# içinde birkaç örnek buldum, ama VB.NET'e dönüştürmeye çalıştığımda başarılı olamadım. Dönüştürmeye çalıştığım onaltılık bir sayı örneği "A14152464C203230304232323020572F544947455234352E" dir.VB.NET kullanarak onaltılıyı onluk olarak nasıl çevirirsiniz?

+0

sen bekliyoruz hangi numara? Yani dahili türlerinin çoğu çok daha büyük 192 bit ... bir ... –

+0

Ben numarası olmalıdır bilmiyorum –

cevap

6

Bu, 24 baytlık (192 bit) bir sayıdır; Hangi değeri bekliyorsunuz? Burada aşınmış bir sürü iş yapmak Convert kullanabilirsiniz

Not - (C#) örneğin:

bir numaraya raw aldığım Nasıl
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); 
    } 

numara olduğunu düşünüyorum ne olduğuna bağlıdır .NET Reflector arasında ...

Visual Basic çeviri nezaket ("-1" tuhaf görünüyor olsa da):

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 
+0

(Ben sorunuza yeniden yorum ekledi dikkat edin). Lockhead Martin bu verileri göndermeye başladı ve belgeleri bitirmediler. Bu zamanda bir keşif modundayız. Sayısal değeri almak için Raw (i) değerlerini toplamalı mıyım? – user38349

+0

Hayır; Bu kötü olurdu ... sorun: 192 bit ile ne yapmalı?Bu 3 uzun (Int64), 6 inç (Int32), 2 ondalık, bir BigInteger, vb olabilir ... ama büyük endian, küçük endian, vs ... ikili ihtiyaçlarını çözme bir * küçük * bilgi bit kaynak hakkında. –

+0

-1 doğru, VB dizi bildirimi sözdizimi dizinin üst sınırını verirken C# dizisindeki öğe sayısını verir. Dizi sıfır olduğundan, üst sınır, öğelerin sayısından bir tanesidir. – MarkJ

1

Kendiniz yazın.

Dizgiyi belirtmeniz, sonra sağdan başlamanız ve yolunuzu sola döndürmeniz gerekir.

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; 
} 

Bunun gibi birşey.

1
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 

Bu Ondalığa için çalışmaz ve Hex tamsayı için çok uzun ... ama fikir olsun. Onu ayırabilir ve yeniden birleştirebilirsiniz.

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 
0

Bu s dönüştürür bayt bir diziye tring: Aslında çalışmak için bir bignum sınıfını gerektirmeyen onaltılık değerleri için

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
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 
15

, normal dönüştürme işlevini kullanın ama "& H" sayısını önek. VB, "& H" ifadesini, metinde olduğu gibi "bu bir onaltılık sayıdır" şeklinde yorumlar.

dim n = Cint("&H" & text) 
4

Bir onluk değerine onaltılık değerini dönüştürmek için Visual Basic Val işlevini kullanabilirsiniz. Bu, Visual Basic'e bunun onaltılık bir değer olduğunu söylemek ve sonra da bir sayıya dönüştürmek için "&H" dizesini önekleyerek yapılır.

Dim Value As Integer = Val("&H" & YourHexadecimalStringHere) 
0
Dim hex As String = "A1B2C3D4" 
Dim int As Integer = Val("&H" & hex) 
0

diğerleri cevap çalıştı ve bu benim için çalıştı tane oldu:

Convert.ToInt32(yourHEXString, 16) 

Documentation