[erledigt] Long in String(Buchstaben) umwandeln ?

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
scholly
Beiträge: 793
Registriert: 04.11.2005 21:30
Wohnort: Düsseldorf

[erledigt] Long in String(Buchstaben) umwandeln ?

Beitrag von scholly »

moin, moin...
Ich seh mal wieder den Wald vor lauter Bäumen nicht :o
Mit fourCC = ReadLong() lese ich RIFF-Chunks aus einem Binärfile. Für normale Überprüfungen kann ich für "LIST" z.B. so checken:
If fourCC = 'TSIL' : machmadashier : EndIf.
Nun kann es aber sein, daß ein bisher unbekannter FourCC auftaucht, den ich natürlich als 4-stelligen String darstellen möchte.
Gibts dafür eine PB-Funktion ?
bis denne...
scholly
Zuletzt geändert von scholly am 21.04.2008 22:41, insgesamt 1-mal geändert.
Ich bin blutiger PB-Anfänger.
seit 17.12.08: PB 4.3 unter XP Home(SP3)
armada
Beiträge: 100
Registriert: 10.10.2005 18:00
Kontaktdaten:

Beitrag von armada »

also wenn ich des richtig lese willst du ne long-variable in nen string umwandeln!?

geht mit Str(zahl)

mfg
armada
Benutzeravatar
Froggerprogger
Badmin
Beiträge: 855
Registriert: 08.09.2004 20:02

Beitrag von Froggerprogger »

Ich denke, scholly meint eher sowas (?):

Code: Alles auswählen

val.l = 'FFIR'
str.s = PeekS(@val,4)
debug val

debug str
!UD2
Benutzeravatar
scholly
Beiträge: 793
Registriert: 04.11.2005 21:30
Wohnort: Düsseldorf

Beitrag von scholly »

armada hat geschrieben:also wenn ich des richtig lese willst du ne long-variable in nen string umwandeln!?
Nenene, so einfach isset nich :wink:
Str(12345) macht mir den String "12345"
Ich habe aber z.B. 0x52494646 als Ergebnis eines ReadLong() und möchte das in einen String mit 4 Buchstaben wandeln.
Ich bin blutiger PB-Anfänger.
seit 17.12.08: PB 4.3 unter XP Home(SP3)
armada
Beiträge: 100
Registriert: 10.10.2005 18:00
Kontaktdaten:

Beitrag von armada »

achso

Chr(ReadByte())

so könntest es machen

oder als long wie du es willst:

Procedure.s long2string(zahl.l)
ProcedureReturn Chr( (zahl<<24) >> 24 ) + Chr( (zahl<<16) >> 24 ) + Chr( (zahl<<8 ) >> 24 ) + Chr( zahl >> 24 )
EndProcedure

ich weiß is jetzt nich die eleganteste lösung...sollte aber funktionieren
Benutzeravatar
scholly
Beiträge: 793
Registriert: 04.11.2005 21:30
Wohnort: Düsseldorf

Beitrag von scholly »

:praise: Danke !!!

Beide Codes liefern mir das gewünschte, aber verstehen tu ich beide nich.
Egal, Hauptsache ich brauch nich mehr im Dunkeln zu Tappen, wenn ich einem unbekannten FourCC begegne ;)

bis denne...
scholly
Ich bin blutiger PB-Anfänger.
seit 17.12.08: PB 4.3 unter XP Home(SP3)
Benutzeravatar
Froggerprogger
Badmin
Beiträge: 855
Registriert: 08.09.2004 20:02

Beitrag von Froggerprogger »

PeekS() macht eigentlich genau das, was du wolltest:
Angefangen bei der angegebenen Position im Speicher, hier z.B. an der Adresse von val, wird Byte für Byte der Bytewert gelesen und einfach als ASCII-Wert für den nächsten Buchstaben genommen. Steht dort z.B. der Wert 70 geschrieben, wird daraus ein "F".
Ebenso macht armada das, bloss halt manuell, indem er jedes der 4 Bytes zunächst nach links shifted (um die höheren Bits rauszuschieben) und dann soweit zurück nach rechts (unter Beibehalt des Vorzeichens), dass die Bits dieses Bytes an der Stelle des niedrigsten Bytes stehen.

In diesem Zusammenhang ist mir übrigens eben ein Bug in PB unter die Finger gekommen, bspw. wird 'ßßßß' inkorrekt in eine Zahl übersetzt. Bei Interesse hier: http://forums.purebasic.com/english/vie ... 182#116182
!UD2
Benutzeravatar
scholly
Beiträge: 793
Registriert: 04.11.2005 21:30
Wohnort: Düsseldorf

Beitrag von scholly »

@Froggerprogger:
Danke für die Erklärung - Peek und Poke hab ich seit C64er-Zeiten nich mehr inne Finger jehabt. Aber nun sieht mein Code übersichlicher/verständlicher aus.
bis denne...
scholly
Ich bin blutiger PB-Anfänger.
seit 17.12.08: PB 4.3 unter XP Home(SP3)
Benutzeravatar
Batze
Beiträge: 1492
Registriert: 03.06.2005 21:58
Wohnort: Berlin
Kontaktdaten:

Beitrag von Batze »

Du soltest es aber nicht in einem String speichern, da wenn da dann eine 0 in der Zahl ist, der String abgeschnitten wird.
Hier sind meine Codes (aber die Seite geht gerade nicht):
http://www.basicpure.de.vu
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

du wirst dann allerdings wohl ein problem beim auslesen des strings bekommen:

ein mittenstehendes 0-Byte wird als String-Ende interpretiert....

[edit]Batze war schneller...
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Antworten