Seite 1 von 1
HEX to Num..
Verfasst: 26. November 2018, 18:51
von satmax
Ich sollte eine Hex Zahl in einen String oder Long int wandeln:
Das ist die Hex Zahl: 00 00 00 00 00 00 A4 33 wäre 42035 dec
Ich bekomme immer nur 0 raus:
Code: Alles auswählen
EDT_Integer1= LoWord(Vorgang.Rowversion,4) // liefert: 0
EDT_Real1 = HiWord(Vorgang.Rowversion,4) // liefert: 0
nRowversion is 8-byte int
nRowversion=HexaToInt( Vorgang.Rowversion) // liefert: 3 721 099 192 114 872 320
Re: HEX to Num..
Verfasst: 28. November 2018, 11:49
von Herbert
Code: Alles auswählen
sHex is UNICODE string
nint is int
sHex="A433"
nint=Val(sHex,"x")
Re: HEX to Num..
Verfasst: 28. November 2018, 15:47
von satmax
Mit dem Debugger (evalute expression):
Vorgang.Rowversion -> 00 00 00 00 00 00 A4 33 // Vorgang.Rowversion ist ein Datenbankfeld type rowversion
Mit dem Debugger (evalute expression):
sHex is UNICODE string = Vorgang.Rowversion
sHex - > <0><0><0>㎤
also völlig ein anderer Wert wie in Vorgang.Rowversion
nInt= Val(sHex,"x")
nInt= Val(Vorgang.Rowversion,"x")
Beides liefert 0
Re: HEX to Num..
Verfasst: 28. November 2018, 18:26
von Herbert
Aha, du musst schon alle Details erwähnen. So mit deinen Grundwerten geht das nicht. Bei meiner Annahme war derAusgang der Variablen eine Stringvariable.
Vorgang.rowversion ist nicht Unicode
Zur Info: Rowversion ist ein SQL-Datentyp. Er enthält automatisch generierte Binärzahlen und ist 8 byte gross, stets inkrementierend. Wird in Tabellen verwendet.
Du musst über die Buffervariable gehen.
// Inhalt herrichten, den du hast (nur zum simulieren deines Ausgangswertes)
Code: Alles auswählen
sHex="000000000000A433"
Sbbuf is Buffer
Sbbuf=HexaToBuffer(sHex) // zeigt an: 00 00 00 00 00 00 A4 33
müsste identisches Ergebnis zeigen mit deiner Variablen
Das willst du also konvertieren
Code: Alles auswählen
sHex is UNICODE string
sHex=BufferToHexa(Sbbuf) // ergibt "00 00 00 00 00 00 A4 33"
nint=Val(NoSpace(sTxt,sscAll),"x") // 42035
Re: HEX to Num..
Verfasst: 29. November 2018, 09:06
von satmax
Danke, das passt jetzt, man muss das Datenbankfeld rowversion wie einen Buffer sehen...
Der vollständigkeit halber:
herbert hat geschrieben: ↑28. November 2018, 15:47
nint=Val(NoSpace(sTxt,sscAll),"x") // 42035
Hier ist ein Tippfehler, muss lauten
So funktioniert es dann bei mir:
Code: Alles auswählen
nInt is int
sHex is UNICODE string
sHex=BufferToHexa(Vorgang.Rowversion ) // ergibt "00 00 00 00 00 00 A4 33"
nInt=Val(NoSpace(sHex,sscAll),"x") // 42035
Nochmals danke Herbert, darauf wäre ich nicht so schnell gekommen.