Avatar billede cablenet.dk Nybegynder
27. oktober 2004 - 11:13 Der er 13 kommentarer og
2 løsninger

Konverteringer af tal i VB-NET

Hej!

Findes der ikke en smart funktion/namespace i VB-NET som kan komverterer decimal til binary, hex osv.?

På forhpnd tak!
Avatar billede arne_v Ekspert
27. oktober 2004 - 11:26 #1
Husk at decimal/hex kun er relevant for en String representation fa tal.

Til og fra hex er heri: http://www.eksperten.dk/artikler/278
Avatar billede cablenet.dk Nybegynder
27. oktober 2004 - 11:50 #2
Ja det ved jeg godt, men jeg skal fx have:

Hex: FF konverteret til 11111111
Hex: 00 til 00000000
Osv...
Avatar billede arne_v Ekspert
27. oktober 2004 - 12:03 #3
Dim hex As String = "FF"
Dim i As Integer = Integer.Parse(sv, NumberStyles.HexNumber)
Dim dec As String = i.ToString("X")

burde virke
Avatar billede cablenet.dk Nybegynder
27. oktober 2004 - 13:28 #4
Det du skrev ... hvis jeg fx skriver FF retunerer den 255 ... jeg vil gerne have den til at retunere 11111111 ...
Avatar billede arne_v Ekspert
27. oktober 2004 - 13:33 #5
Det jeg skrev var hexadecimal-decimal

Du vil have hexadecimal-binær
Avatar billede arne_v Ekspert
27. oktober 2004 - 13:36 #6
Jeg er ikke lige opmærksom på en smart måde at gør det på.

Men det må være ret nemt med en primitiv måde da 16 hex cifre 0-F
bliver til 16 fire cifrede binære tal 0000-1111, så man kan konvertere
et hex tegn af gangen.
Avatar billede arne_v Ekspert
27. oktober 2004 - 13:39 #7
Alternativt må også kunne udregne det.

Dim bin As String = ""
Dim tmp As Integer = i
While tmp > 0
  bin = (tmp mod 2) & bin
  tmp = tmp / 2
End While
Avatar billede arne_v Ekspert
27. oktober 2004 - 13:40 #8
Ovenstående er utestet. Jeg kan lave et komplet eksempel senere.
Avatar billede cablenet.dk Nybegynder
27. oktober 2004 - 14:17 #9
Det kan da ikke være så svært? :D Hehe ... Hvis jeg nu bare har en short værdi (i dette tilfælde 0-255) kan jeg så ikke få det retuneret til bit? Hvor 0 er 00000000 og 255 er 111111111?
Avatar billede cablenet.dk Nybegynder
27. oktober 2004 - 14:21 #10
Function ShortTOBit(ByVal Input As Short) As String
        Select Case Input
            Case 0
                Return "00000000"
            Case 1
                Return "00000001"
            Case ...
                Return "..."
            Case 255
                Return "11111111"
        End Select
    End Function

Det må da kunne gøres enmmere end det her!
Avatar billede arne_v Ekspert
27. oktober 2004 - 14:25 #11
Du kan tage det per nibble i stedetfor per byte, så er der kun 16 cases
Avatar billede cablenet.dk Nybegynder
27. oktober 2004 - 14:46 #12
Jeg har endelig fået lavet en selv :D:
    Public Function ShortToBit(ByVal Input As Short) As Integer
        Dim Bstring As String
        Dim x As Integer = 7
        While x > -1
            If Input > System.Math.Pow(2, x) - 1 Then
                Input -= CType(System.Math.Pow(2, x), Integer)
                Bstring += "1"
            Else
                Bstring += "0"
            End If
            x = x - 1
        End While
        Return Convert.ToInt32(Bstring)
    End Function
Avatar billede arne_v Ekspert
27. oktober 2004 - 14:50 #13
Den kan jeg godt lave bedre.

Men jeg har først tid i aften.

Du prøvede ikke det jeg skitserede 13:39:58 ?
Avatar billede arne_v Ekspert
27. oktober 2004 - 20:09 #14
Her er den lovede kode:

Imports System

Class MainClass
    Private Shared DIGITS As String = "0123456789ABCDEF"
    Private Shared Function FromAny(ByVal s As String, ByVal radix As Integer) As Integer
        Dim res As Integer = 0
        Dim sa() As Char = s.ToCharArray
        Dim i As Integer
        For i = 0 To s.Length-1
            res = res * radix + DIGITS.IndexOf(sa(i))
        Next
        FromAny = res
    End Function
    Private Shared Function ToAny(ByVal i As Integer, ByVal radix As Integer) As String
        Dim res As String = ""
        Dim tmp As Integer = i
        While tmp > 0
            res = DIGITS.ToCharArray()(tmp Mod radix) & res
            tmp = tmp \ radix
        End While
        ToAny = res
    End Function
    Public Shared Function FromDec(ByVal s As String) As Integer
        FromDec = FromAny(s, 10)
    End Function
    Public Shared Function ToDec(ByVal i As Integer) As String
        ToDec = ToAny(i, 10)
    End Function
    Public Shared Function FromHex(ByVal s As String) As Integer
        FromHex = FromAny(s, 16)
    End Function
    Public Shared Function ToHex(ByVal i As Integer) As String
        ToHex = ToAny(i, 16)
    End Function
    Public Shared Function FromBin(ByVal s As String) As Integer
        FromBin = FromAny(s, 2)
    End Function
    Public Shared Function ToBin(ByVal i As Integer) As String
        ToBin = ToAny(i, 2)
    End Function
    Public Shared Sub Main(ByVal args As String())
        Console.WriteLine(ToBin(FromHex("FF")))
        Console.WriteLine(ToBin(FromDec("11")))
    End Sub
End Class
Avatar billede cablenet.dk Nybegynder
01. november 2004 - 17:46 #15
Ja, den funktion kan lidt mere end min ;) Har dog ikke brug for alt dette ... Den jeg lavede selv virker perfekt! Men tak anyway ... !
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester