in reply to Add 1 to an arbitrary-length binary string

Note: I haven't used Net::Etcd or etcd before, so just speculating.

I have a feeling you won't be able to do that using the Perl module. From what I can see from the docs for range_end, plus this clarification of what it means (their examples of "aa"+1 == "ab", "a\xff"+1 == "b"), plus how it's implemented in Perl by calling encode_base64 on whatever you pass in; assuming it's that encoded data that's passed to the underlying go code, it seems like you won't ever be able to "increment by 1", since the encoded thing will be..."randomized".

But maybe I'm misreading things..

EDIT: thinking about it more, probably the encoding/decoding is just to pass it over JSON, so the encoding part was wrong. So maybe if you can figure out how to translate "a\xff"+1 == "b" to Perl. I'm not sure exactly what that means, but it seems to take the bit representation of the string and add 1 to it? (Am I just repeating your original question? Heh...)

Replies are listed 'Best First'.
Re^2: Add 1 to an arbitrary-length binary string
by syphilis (Archbishop) on Nov 15, 2023 at 23:29 UTC
    So maybe if you can figure out how to translate "a\xff"+1 == "b" to Perl.

    Well ... this is precisely what Math::GMPz's Rmpz_import() and Rmpz_export() do. In the second of the 2 scripts I provided earlier, the string "aa" gets incremented to "ab", and the string "a\xff" gets incremented to "b".
    This suggests that the underlying gmp functions (mpz_import and mpz_export), wrapped by Rmpz_import/Rmpz_export, might well be providing the desired behaviour.

    Cheers,
    Rob