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

:huh:


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

Code: Alles auswählen

Sbbuf is Buffer
sBbuf=Vorgang.rowversion 
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

Code: Alles auswählen

nint=Val(NoSpace(sHex,sscAll),"x")		// 42035
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.