Viel Spaß damit.7x7 hat geschrieben:Gerne!NicTheQuick hat geschrieben:...kann ich meinen Code gerne noch für dich kommentieren. Also?
Geschwindigkeit
- NicTheQuick
- Ein Admin
- Beiträge: 8809
- Registriert: 29.08.2004 20:20
- Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti - Wohnort: Saarbrücken
Re: Geschwindigkeit
Re: Geschwindigkeit
Ist zwar etwas overkill, aber jetzt habe ich endlich alles kapiert 

- alles was ich hier im Forum sage/schreibe ist lediglich meine Meinung und keine Tatsachenbehauptung
- unkommentierter Quellcode = unqualifizierter Müll
- unkommentierter Quellcode = unqualifizierter Müll
- NicTheQuick
- Ein Admin
- Beiträge: 8809
- Registriert: 29.08.2004 20:20
- Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti - Wohnort: Saarbrücken
Re: Geschwindigkeit
Mir fällt's da auch eh immer schwer den richtigen Punkt zwischen grober und detaillierter Erklärung zu finden.
Re: Geschwindigkeit
Blindfischfütterung
Wer Code nicht lesen kann oder will, will Code nicht lesen oder kann es nicht.
außerdem fehlt ein '-1,#PB_Ascii)' in Nics Code

Wer Code nicht lesen kann oder will, will Code nicht lesen oder kann es nicht.
außerdem fehlt ein '-1,#PB_Ascii)' in Nics Code
pb aktuel 6.2 windoof aktuell und sowas von 10
Ich hab Tinnitus im Auge. Ich seh nur Pfeifen.
Ich hab Tinnitus im Auge. Ich seh nur Pfeifen.
Re: Geschwindigkeit
Hallo
Hab den Code für ungerade Stringfolgen optimiert.
Grüße
Lite
Hab den Code für ungerade Stringfolgen optimiert.
Code: Alles auswählen
String$ = "78DAA5975758135A97862345A922BD0A28BD86167A111040"
String$ = "78d"
datalen = Len(String$)
If datalen =0: End: EndIf
datalen=Round(datalen / 2,#PB_Round_Nearest)
*memdata = AllocateMemory(datalen)
Define v.i, *c.Character, *m.Ascii
*c.Character = @String$
*m.Ascii = *memdata
While *c\c
*m\a = *c\c - '0' ; unteres Nibbel ; Zahl umrechnen
If *c\c >= 'A': *m\a = *c\c - 'A' + 10: EndIf ; Buchstabe umrechnen
*c + SizeOf(Character)
If *c\c = 0
*m\a &15 ; bei ungerade , Reste von oberes Nibbel löschen
Break ; schleife beenden
EndIf
*m\a << 4 ; unteres Nibbel nach oben verschieben
v = *c\c - '0' ; Zahl umrechnen
If *c\c >= 'A': v = *c\c - 'A' + 10: EndIf ; Buchstabe umrechnen
*m\a + v ; oberes und unteres Nibbel addieren
*c + SizeOf(Character) ; quell Pointer erhöhen
*m + SizeOf(Ascii) ; Ziel Pointer erhöhen
Wend
ShowMemoryViewer(*memdata,datalen)
Lite
Re: Geschwindigkeit
Lite, dein Code hat aber ein Problem:
Es gibt von demn String "78d" die Bytes 78 0D zurück.
Richtig wäre eigentlich 07 8D.
Wenn eine ungerade Springlänge hast füge doch einfach vorne ein "0" an, bevor du es konvertierst.
Es gibt von demn String "78d" die Bytes 78 0D zurück.
Richtig wäre eigentlich 07 8D.
Wenn eine ungerade Springlänge hast füge doch einfach vorne ein "0" an, bevor du es konvertierst.
PureBasic 5.46 LTS (Windows x86/x64) | windows 10 x64 Oktober failure
Re: Geschwindigkeit
@_jon_
Bin nicht ganz deiner Meinung.
Die Schreibweise erfolgt paarweise von Links.
z.B. 78d = 78 d
Im Speicher sollte dann stehen "78 0d".
Lite
Bin nicht ganz deiner Meinung.
Die Schreibweise erfolgt paarweise von Links.
z.B. 78d = 78 d
Im Speicher sollte dann stehen "78 0d".
Lite
- NicTheQuick
- Ein Admin
- Beiträge: 8809
- Registriert: 29.08.2004 20:20
- Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti - Wohnort: Saarbrücken
Re: Geschwindigkeit
Das eigentliche Problem ist, dass mein Code nur funktioniert, wenn die Buchstaben im Hex-String groß geschrieben werden. Bei Kleinbuchstaben wie dem d wird falsch umgerechnet, da d den ASCII-Wert 100 hat, dann der ASCII-Code von A abgezogen wird, das wäre dann 100 - 65 = 35 und dann 10 addiert wird, womit wir 45 erhalten statt dem eigentlichen Wert 13. 
Und wegen dem anderen Problem, fände ich es schlauer aus einem ungeraden String mit dem Inhalt 78D dann 78 D0 zu machen, oder?

Und wegen dem anderen Problem, fände ich es schlauer aus einem ungeraden String mit dem Inhalt 78D dann 78 D0 zu machen, oder?
Re: Geschwindigkeit
Nun gut sind deine Daten/Werte und du wirst schon wissen wie du sie interpretierst.lite hat geschrieben:@_jon_
Bin nicht ganz deiner Meinung.
Die Schreibweise erfolgt paarweise von Links.
z.B. 78d = 78 d
Im Speicher sollte dann stehen "78 0d".
Aber das "78 0d" finde ich dann wiederum auch komisch,
wäre dann nicht (wie NicTheQuick meint) "78 D0" das richtige Ergebnis?
Wie auch immer persönlich würde ich im Fall eines ungeraden Strings hier einen Datenfehler melden und das nicht einfach ignorieren.
PureBasic 5.46 LTS (Windows x86/x64) | windows 10 x64 Oktober failure
Re: Geschwindigkeit
Hallo
Hätte wieder ein kleines Problem mit der Geschwindigkeit.
Meine Aufgabenstellung ist, ich möchte Strings zu einem String zusammen zu fügen.
Beispiel in PB:
Dieses Beispiel in PureBasic benötigt 13000 ms.
Das Beispiel in Au3:
In Au3 benötigt dieses Beispiel 845 ms.
Gibt es eine Lösung diese Stringverwaltung schneller zu machen ?
Dim a$(50000) nützt mir nichts, die Strings die hinzugefügt werden sind in der Größe variabel.
Lite
Hätte wieder ein kleines Problem mit der Geschwindigkeit.
Meine Aufgabenstellung ist, ich möchte Strings zu einem String zusammen zu fügen.
Beispiel in PB:
Code: Alles auswählen
#Size = 50000
a$=""
Time = ElapsedMilliseconds()
For n = 1 To #Size
a$+"w"
Next
Time1 = ElapsedMilliseconds()-Time
MessageRequester(Str(time1),a$)
Das Beispiel in Au3:
Code: Alles auswählen
$begin = TimerInit()
$a=""
$size= 50000
for $n=1 to $size
$a=$a&"w"
next
$dif = TimerDiff($begin)
MsgBox(0,"Time Difference",$dif&@crlf&$a)
Gibt es eine Lösung diese Stringverwaltung schneller zu machen ?
Dim a$(50000) nützt mir nichts, die Strings die hinzugefügt werden sind in der Größe variabel.
Lite