Liebe Gäste des Forums
Danke, dass ihr euch hier auf dem inoffiziellen Windev-Forum umschaut. Hier werden Tipps und Hinweise zu der von PC-Soft angebotenen Software Windev besprochen.
Windev ist eine leistungsstarke, sehr umfangreiche Entwicklersoftware für Webseiten, Handys und Rechner verschiedener Betriebssysteme. Mehr unter http://www.windev.com

HEX to Num..

Alle Themen rund um die Erstellung von Programmen
Antworten
satmax
Member
Beiträge: 210
Registriert: 24. September 2015, 10:05
Wohnort: Biberbach, Austria
Kontaktdaten:

HEX to Num..

Beitrag von satmax » 26. November 2018, 18:51

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

Herbert
Site Admin
Beiträge: 395
Registriert: 23. Februar 2010, 08:06
Wohnort: Langenthal, Schweiz
Kontaktdaten:

Re: HEX to Num..

Beitrag von Herbert » 28. November 2018, 11:49

Code: Alles auswählen

sHex is UNICODE string
nint is int

sHex="A433"
nint=Val(sHex,"x")

satmax
Member
Beiträge: 210
Registriert: 24. September 2015, 10:05
Wohnort: Biberbach, Austria
Kontaktdaten:

Re: HEX to Num..

Beitrag von satmax » 28. November 2018, 15:47

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

Herbert
Site Admin
Beiträge: 395
Registriert: 23. Februar 2010, 08:06
Wohnort: Langenthal, Schweiz
Kontaktdaten:

Re: HEX to Num..

Beitrag von Herbert » 28. November 2018, 18:26

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

satmax
Member
Beiträge: 210
Registriert: 24. September 2015, 10:05
Wohnort: Biberbach, Austria
Kontaktdaten:

Re: HEX to Num..

Beitrag von satmax » 29. November 2018, 09:06

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.

Antworten