HEX 2 ASCII ?

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
nicolaus
Moderator
Beiträge: 1175
Registriert: 11.09.2004 13:09
Kontaktdaten:

HEX 2 ASCII ?

Beitrag von nicolaus »

Hi,

wie kann ich mit PB HEX zu ASCII wandeln?
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7028
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Beitrag 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"))
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
nicolaus
Moderator
Beiträge: 1175
Registriert: 11.09.2004 13:09
Kontaktdaten:

Beitrag 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
Benutzeravatar
nicolaus
Moderator
Beiträge: 1175
Registriert: 11.09.2004 13:09
Kontaktdaten:

Beitrag 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.
Benutzeravatar
D@nte
Beiträge: 324
Registriert: 24.04.2007 15:33
Wohnort: Berlin

Beitrag 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
Benutzeravatar
AND51
Beiträge: 5220
Registriert: 01.10.2005 13:15

Beitrag 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}
PB 4.30

Code: Alles auswählen

Macro Happy
 ;-)
EndMacro

Happy End
Benutzeravatar
AND51
Beiträge: 5220
Registriert: 01.10.2005 13:15

Beitrag 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
PB 4.30

Code: Alles auswählen

Macro Happy
 ;-)
EndMacro

Happy End
Benutzeravatar
D@nte
Beiträge: 324
Registriert: 24.04.2007 15:33
Wohnort: Berlin

Beitrag 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.
Benutzeravatar
HeX0R
Beiträge: 3040
Registriert: 10.09.2004 09:59
Computerausstattung: AMD Ryzen 7 5800X
96Gig Ram
NVIDIA GEFORCE RTX 3060TI/8Gig
Win11 64Bit
G19 Tastatur
2x 24" + 1x27" Monitore
Glorious O Wireless Maus
PB 3.x-PB 6.x
Oculus Quest 2 + 3
Kontaktdaten:

Beitrag 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:
Benutzeravatar
AND51
Beiträge: 5220
Registriert: 01.10.2005 13:15

Beitrag 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.
PB 4.30

Code: Alles auswählen

Macro Happy
 ;-)
EndMacro

Happy End
Antworten