Esteban A. Maringolo wrote
> Hi Richard,
> 
> Certainly a BitStream is beyond what I initially thought.
> 
> But it could be of some use to play with it, is it available somewhere
> with a friendly open source license?
> 
> I might give it a try using it for my generator (tests are already
> passing). Your example is almost complete, but if I understand it
> you're adding the size of the checksum instead of the checksum itself.
> Nonetheless I think its readability is superior, and I guess that it
> is better perfomance and memorywise.
> 
> Also it could be useful for Base58Encoder I'm expermenting with.
> Encoding is "simple" but requires the use of a really large integer,
> I'm stuck at the decoding part now.
> After that there is a Base32 encoder (to implement a Bech32 encoder as
> well).
> 
> So I might use it in my road of experimentation with these matters.
> Unless I diverge from this and abandon it as it normally happens. :/

BaseX encode/decode can be simple enough to fit in a small workspace:

base := 58.
base58Lookup :=
'123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz'.
myNumber := 12345678901234567890.

decode := [ :string | |decodedNumber|
        decodedNumber := 0.
        string do: [ :char | decodedNumber := decodedNumber * base 
+(base58Lookup
indexOf: char) - 1 ].
        decodedNumber ].
encode := [ :number | |encodedString numDigits toEncode| 
        numDigits := (number numberOfDigitsInBase: base).
        toEncode := number.
        encodedString := String new: numDigits.
        0 to: numDigits - 1 do: [ :i | |lutIndex|
                encodedString at: numDigits - i put: (base58Lookup at: toEncode 
\\ base +
1).
                toEncode := toEncode // base. ].
        encodedString ].

myString := encode value: myNumber.
(decode value: myString) = myNumber.

The appeal of Base64 is it transforms the // and \\ operations into simple
shifts / masks.

Cheers,
Henry



--
Sent from: http://forum.world.st/Pharo-Smalltalk-Users-f1310670.html

Reply via email to