Seite 1 von 1

HEX 2 ASCII ?

Verfasst: 17.05.2009 23:06
von nicolaus
Hi,

wie kann ich mit PB HEX zu ASCII wandeln?

Verfasst: 17.05.2009 23:08
von STARGÅTE
Ascii Zahl :

Code: Alles auswählen

Hex = $B0
Debug Str(Hex)
Ascii Zeichen:

Code: Alles auswählen

Hex = $B0
Debug Chr(Hex)
oder habe ich jetzt was falsch verstanden ?
oder so?

Code: Alles auswählen

Debug Val("$B0")
oder ?

Code: Alles auswählen

Debug Chr(Val("$B0"))

Verfasst: 17.05.2009 23:15
von nicolaus
ok dann geht das so nicht wie ich das denke.

Ich habe einen extrem langen HEX wert und den müste ich nun in 2 byte stücken nach ascii wandeln.

Wie könnte ich das am besten machen?

Danke und gruß,
Nico

Verfasst: 17.05.2009 23:19
von nicolaus
Also z.b. habe ich sowas:

Code: Alles auswählen

HEX = $696D6C5666374861645137307A6C466C516E6F2F73736937614A616C734E4C765830636751345930544E543232345A6775396C6C43683957374361656D58726333464D79484C704672413D3D0D0A
Dies müßte ich nun in 2 byte stücken nach Ascii wandeln.

Verfasst: 17.05.2009 23:35
von D@nte

Code: Alles auswählen

Procedure Hex2Dec(N.s)
  For i = 1 To Len(N)
    d = (d << 4) + Asc(UCase(Mid(N,i,1)))-48 - 7 * (Asc(UCase(Mid(N,i,1)))>>6)
  Next
  ProcedureReturn d
EndProcedure 

string.s = "696D6C5666374861645137307A6C466C516E6F2F73736937614A616C734E4C765830636751345930544E543232345A6775396C6C43683957374361656D58726333464D79484C704672413D3D0D0A"

out.s = ""

For i = 1 To Len(string)/2 Step 2
  out = out + Chr(Hex2Dec(Mid(string, i, 2)))
Next i

Debug out
Wenne den Hexstring allerdings in ner Datei vorliegen haben solltest, sollte ReadString() reichen

Verfasst: 17.05.2009 23:37
von AND51
Wie liegt der Hex-Wert denn vor? Als String oder ist das wirklich eine numerische Zahl? Wenn das eine Zahl ist, dann müsste die ja gigantisch sein. Die passt doch in keinen Quad.

Liegt der Hex-Wert als String vor, ginge das hiermit ganz gut:

Code: Alles auswählen

HEX.s = "$696D6C5666374861645137307A6C466C516E6F2F73736937614A616C734E4C765830636751345930544E543232345A6775396C6C43683957374361656D58726333464D79484C704672413D3D0D0A"
CreateRegularExpression(0, "[A-F\d]{2}")
Dim stueckchen.s(0)
anzahl=ExtractRegularExpression(0, HEX, stueckchen())

For n=1 To anzahl
	Debug stueckchen(n-1)
Next
Der Reguläre Ausdruck liest immer 2 Character ein, egal ob Buchstabe oder Ziffer und ignoriert dabei das Dollarzeichen. Dazu muss der String natürlich eine gerade Anzahl an Character haben, damit ein einzelnes, übriggebliebener Character nicht ignoriert wird.
Sollte der auch noch berücksichtigt werden, nimmst du diesen Regulären Ausdruck:

Code: Alles auswählen

[A-F\d]{1,2}

Verfasst: 17.05.2009 23:42
von AND51
@ Dante:

Du weißt, dass Hex2Dec() obsolet ist, seit Val() ebenfalls Hex- und Binär-Werte unterstützt? Val() ist perfomancemäßig noch nicht von einer Hex2Dec()-Variante geschlagen worden.
Das hier reicht also:

Code: Alles auswählen

string.s = "696D6C5666374861645137307A6C466C516E6F2F73736937614A616C734E4C765830636751345930544E543232345A6775396C6C43683957374361656D58726333464D79484C704672413D3D0D0A" 

out.s = "" 

For i = 1 To Len(string)/2 Step 2 
  out = out + Chr(Val("$"+Mid(string, i, 2))) 
Next i 

Debug out

Verfasst: 17.05.2009 23:55
von D@nte
Ich muss zu meiner Schande gestehen, dass es mir bis gradeben nicht bekannt/bewußt war das Val() auch HEX bzw BIN umrechnen kann (Asche auf mein Haupt), sonst hät ich's benutzt.
Ist doch auch zu erwarten das ein Bordmittel schneller ist als eine extra zu diesem Zweck geklaute Prozedur.

Verfasst: 20.05.2009 07:56
von HeX0R
Zumindest von einem Mod hätte ich erwartet, dass er weiß, dass Cross-Foren-Beiträge
(solange es keine Programmvorstellungen o.ä. sind) so ziemlich das letzte sind :evil:

Verfasst: 20.05.2009 13:14
von AND51
Das hab ich schon bei meinem letzten Post gesehen. Konnte aber leider meine Hilfe bis dato nicht mehr zurücknehmen.
Was solls, nächstes mal, weiß er ja, wo er fragen kann; d. h. wenn er überhaupt mal antwortet.