On 30.12.2008 13:55 Uhr, "Stefan Mettenbrink" wrote: > Das habe ich für RB im Groben so umgesetzt (ohne Zeilenumbruch): > do > t=t+Hex(b.ReadByte) > loop until b.EOF
Ja, string-additionen auf diese weise werden mit der länge recht langsam. Probiere es mal, indem du immer nur kleinere strings (z.b. max 100 byte) zusammensetzt, diese dann in einem array sammelst und dann das array am ende mit der Join()-Funktion zu einem string zusammensetzt. Oder noch viel besser: lege MemoryBlocks an und füge dort die Bytes mit StringValue(i*2, b) ein. Die kannste am Ende auch einfach auf Strings zuweisen, bzw. in ein string-array, dann wieder join am ende. auch ist Hex(b.readbyte) sehr ineffektiv auf lange sicht: 1. ist da ein bug, weil werte von 0-15 nur einstellige strings liefern. 2. readbyte ist langsam lösung: lies alle auf einmal in eien string per readall ein. dann lege einen memoryblock an, der genau 2* die größe des orig-strings ist. (benutze LenB()!) dann hole dir die bytes aus dem orig-string, z.b. mit MidB(s, idx, 1), und füge convertiere die nach hex etwa so: dim b as UInt8 = AscB(MidB(s, idx, 1)) dim h as string if b < 16 then h = "0"+hex(b) else h = hex(b) end memblk.stringvalue(idx*2, h) du kannst auch die source-daten aus einem memblk per UInt8Value holen statt mit MidB zu arbeiten. macht's auch schneller, vermutlich
