[VB.NET] Hex in int umwandeln

09/26/2013 16:38 stotterer09#1
Hallo ich möchte einen 16 bit hex wert in einen Integer mit vb.net umwandeln

dazu lese ich erstmal etwas in ein array und wandel des dann mitm bitconverter um
aber was sonst funktionier funkt nicht und ich weiß nicht wiso
Code:
 
    Dim wIDB() As Byte
    Dim Bytes() As Byte
       wIDB = {"&H" & Bytes(2), "&H" & Bytes(3)}
Bytes(2) = CB als hex
und
Bytes(3) = 66 als hex

der Fehler ist :
Die arithmetische Operation hat einen Überlauf verursacht.


kann mir jemand helfen?
der code ist korrekt so hab ich das schon öfters gemacht und auch Bytes(2) und Bytes(3) ist korrekt was habe ich dann falsch gemacht?
und das ergebnis sprengt auch nicht den Ramen eines integer16
09/26/2013 16:41 tolio#2
dim result as integer = convert.int32("[hex]",16)

&H wird nicht benötigt
09/26/2013 16:45 qkuh#3
Oder:
Code:
Sub Main()
        Dim bytes() As Byte = New Byte() {&HCB, &H66}
        Dim i As Int16 = BitConverter.ToInt16(bytes, 0)
        Console.WriteLine("Integer: {0}", i)
        Console.ReadLine()
End Sub
09/26/2013 16:50 stotterer09#4
Ah ich hab jetz kapiert warum das den Überlauf verursacht hat ich hab ned bedacht das ich zuert den Bytes(3) einlesen muss wegen Little und Big Endian und so

es geht trozdem ned.
jetz kommt(auch mit deinem code tolio)
Code:
   wIDI(NPCCount) = Convert.ToInt32(Bytes(3) & Bytes(2), 16)
Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt.

den fehler kenne ich davon wenn etwas NULL zurück gibt was es aber in diesem fall sicher nicht tut

Quote:
Originally Posted by qkuh View Post
Oder:
Code:
Sub Main()
        Dim bytes() As Byte = New Byte() {&HCB, &H66}
        Dim i As Int16 = BitConverter.ToInt16(bytes, 0)
        Console.WriteLine("Integer: {0}", i)
        Console.ReadLine()
End Sub
so geht das ja auch aber der wert muss ja variabel sein nur in dem beispiel hab ich das verwendet
09/26/2013 17:34 dready#5
Quote:
wIDI(NPCCount) = Convert.ToInt32(Bytes(3) & Bytes(2), 16)
Bin gerad etwas im Stress wenns also schon gesagt wurde oder ich hier gerade was verwechsel sorry, aber sollte nen Int32 nich 4 Bytes haben ?
09/26/2013 22:00 qkuh#6
@stotterer09: Ersetz &HCB und &H66 einfach durch Bytes(2) und Bytes(3) bzw durch Bytes(3) und Bytes(2), je nachdem ob little- oder big-endian.

@dready: Ja. Int32 -> 32bits -> 4bytes
09/26/2013 22:48 stotterer09#7
Quote:
Originally Posted by qkuh View Post
@stotterer09: Ersetz &HCB und &H66 einfach durch Bytes(2) und Bytes(3) bzw durch Bytes(3) und Bytes(2), je nachdem ob little- oder big-endian.

@dready: Ja. Int32 -> 32bits -> 4bytes
Ich bin ja ned blöd ... es liegt auch ned drann das mein code falsch ist sondern das ich irgendwas überseh und es deswegen ned geht ausserdem wäre es.mit den variablen das selbe wie ich im ersten beitrag geschrieben hab
Ausserdem scheitert es doch schon am übetragen in das 2. Arrray vll. War die ünerschtift verfehlt
@dready Ja da liegst du richtig deswegen hab ich ja aus den 32 wieder 16 gemacht
09/27/2013 09:55 Mi4uric3#8
Quote:
Originally Posted by stotterer09 View Post
so geht das ja auch aber der wert muss ja variabel sein nur in dem beispiel hab ich das verwendet
Dann zeig doch mal deinen ganzen Code her, sonst kann dir hier keiner helfen, wenn du nicht genauer spezifizierst, was du für eine Ausgangssituation hast. Wie liest du was ein etc.
09/27/2013 17:39 stotterer09#9
Quote:
Originally Posted by Mi4uric3 View Post
Dann zeig doch mal deinen ganzen Code her, sonst kann dir hier keiner helfen, wenn du nicht genauer spezifizierst, was du für eine Ausgangssituation hast. Wie liest du was ein etc.
der ganze code ist paar 100 Zeilen lang hier nochmal alles was wichtig ist:
Code:
 
    Private Sub LadenToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles LadenToolStripMenuItem.Click
        OpenFileDialog1.ShowDialog()
        Bytes = My.Computer.FileSystem.ReadAllBytes(OpenFileDialog1.FileName)
        Laden()

    End Sub
   Private Sub Laden()
        AnzahlNPC = New Byte() {"&H" & Bytes(0), "&H" & Bytes(1)} 'das hier funkt noch obwohl es der gleiche code is
        MsgBox(BitConverter.ToInt16(AnzahlNPC, 0))

        Dim b As Integer = 7
        Dim b2 As Integer
        Dim NPCCount As Integer = 0
        '()


        Dim bytesFLoat As Byte()
        Dim z As Integer = 0


        z = 0
        wIDB = {"&H" & Bytes(3), "&H" & Bytes(2)}
        wIDI(NPCCount) = BitConverter.ToInt16(wIDB, 0)
'Da kommt noch mehr was aber nichts zur sache tut
End Sub
Und das sind die ersten 9 bytes die eingelesen werden:
Code:
1A 01 CB 66 00 00 D5 03 0D
09/27/2013 18:38 qkuh#10
Schau dir mal [Only registered and activated users can see links. Click Here To Register...] Dokumentation an.
09/27/2013 18:55 Mi4uric3#11
Quote:
Originally Posted by stotterer09 View Post
der ganze code ist paar 100 Zeilen lang hier nochmal alles was wichtig ist:
Code:
 
    Private Sub LadenToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles LadenToolStripMenuItem.Click
        OpenFileDialog1.ShowDialog()
        Bytes = My.Computer.FileSystem.ReadAllBytes(OpenFileDialog1.FileName)
        Laden()

    End Sub
   Private Sub Laden()
        AnzahlNPC = New Byte() {"&H" & Bytes(0), "&H" & Bytes(1)} 'das hier funkt noch obwohl es der gleiche code is
        MsgBox(BitConverter.ToInt16(AnzahlNPC, 0))

        Dim b As Integer = 7
        Dim b2 As Integer
        Dim NPCCount As Integer = 0
        '()


        Dim bytesFLoat As Byte()
        Dim z As Integer = 0


        z = 0
        wIDB = {"&H" & Bytes(3), "&H" & Bytes(2)}
        wIDI(NPCCount) = BitConverter.ToInt16(wIDB, 0)
'Da kommt noch mehr was aber nichts zur sache tut
End Sub
Und das sind die ersten 9 bytes die eingelesen werden:
Code:
1A 01 CB 66 00 00 D5 03 0D
Dein Code ist völliger Schwachsinn, wenn du das erreichen willst, was ich verstanden habe.
Verstanden habe ich folgendes: Du möchtest eine Datei einlesen und die 1. beiden Bytes (WORD) sind die Anzahl der NPCs und die willst du einlesen und im Hex-Format ausgeben.
Ist das korrekt? Oder willst du einen String eingeben der einen Hexadezimalwert enthält und den in einen Integer umwandeln?
Drück dich bitte mal gewählter aus..
09/28/2013 09:49 stotterer09#12
Also ich möchte eine datei einlesen und dann den 3und 4. Byte in ein 16bitinteger umwandeln
Bei den code wird 2 mal was in ein array übergegeben beim ersten mal gehts prima beim 2. Mal (in das array widb) gdhts ned
09/28/2013 11:57 qkuh#13
Hab dich mal bei Skype geadded, um dir zu helfen
09/28/2013 12:24 stotterer09#14
danke qkuh jetz gehts kann geschlossen werden :)
09/30/2013 18:56 xxfabbelxx#15
closed on request