Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.c > #73601

Re: How to encode/decode string of decimal digits

From Ben Bacarisse <ben.usenet@bsb.me.uk>
Newsgroups comp.lang.c
Subject Re: How to encode/decode string of decimal digits
Date 2015-10-23 11:14 +0100
Organization A noiseless patient Spider
Message-ID <871tclq4ck.fsf@bsb.me.uk> (permalink)
References (8 earlier) <n0ai26$56d$1@dont-email.me> <87fv13gjgr.fsf@bsb.me.uk> <87vb9zez2u.fsf@bsb.me.uk> <eb30863e-a503-42d9-bbc7-b58a196aea0b@googlegroups.com> <n0cq5r$p7v$1@dont-email.me>

Show all headers | View raw


pozz <pozzugno@gmail.com> writes:

> Il 22/10/2015 18:31, supercat@casperkitty.com ha scritto:
>> On Thursday, October 22, 2015 at 9:51:41 AM UTC-5, Ben Bacarisse wrote:
>>> ...    Fancier encodings can get up to 18 digits and, if I've counted
>>> them right, it is theoretically possible to encode all strings up to 19
>>> digits in 64 bits, but that's likely to be very messy.
>>
>> A uint64_t handles numbers up to 18446744073709551616 (20 digits)
>>
>> Simple approach: Add 2 to the first digit, replacing it with two digits 10 or
>> 11 if needed.
>>
>> After decoding, if the leading digit is 1, subtract 2 from the initial
>> 2-digit number.
>
> I'm sorry, I couldn't get it. Could you make some examples, please?

I'm not the originator but still...

The idea is to split the string into a lead digit and the rest:

   0    => 0|
   99   => 9|9
   0000 => 0|000
   123  => 1|23
   80   => 8|0

and then add two to the lead digit and concatenate the result:

   0    => 0|    =>  2|0   =>  20
   99   => 9|9   => 11|9   => 119
   0000 => 0|000 =>  2|000 =>  2000
   123  => 1|23  =>  3|23  =>  323
   80   => 8|0   => 10|0   => 100

This gives you a number between 2 (from the string "0") up to
11999999999999999999 from 9999999999999999999 (19 9s).  That range of
numbers can be stored in a uint64_t directly.

The neat trick is that by adding two (rather than one) you can always
decode a leading "1" as being part of a "11" or "10" pair resulting from
an 8 or 9 in the original.  Were you to add only one, both "00" and "9"
would result in "10".

There are simpler, similar, approaches, such as just putting a "1" on
the left of the string, but that does not work for 19 digits though it
does for 18.  All of these require decimal conversion where the BCD
approach does not, but you get two or three more digits in exchange.

<snip>
-- 
Ben.

Back to comp.lang.c | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread


Thread

How to encode/decode string of decimal digits pozz <pozzugno@gmail.com> - 2015-10-19 14:28 +0200
  Re: How to encode/decode string of decimal digits Bartc <bc@freeuk.com> - 2015-10-19 14:07 +0100
    Re: How to encode/decode string of decimal digits pozz <pozzugno@gmail.com> - 2015-10-19 15:58 +0200
      Re: How to encode/decode string of decimal digits Bartc <bc@freeuk.com> - 2015-10-19 15:22 +0100
      Re: How to encode/decode string of decimal digits Ben Bacarisse <ben.usenet@bsb.me.uk> - 2015-10-19 15:58 +0100
        Re: How to encode/decode string of decimal digits Ben Bacarisse <ben.usenet@bsb.me.uk> - 2015-10-19 22:28 +0100
  Re: How to encode/decode string of decimal digits Eric Sosman <esosman@comcast-dot-net.invalid> - 2015-10-19 13:30 -0400
    Re: How to encode/decode string of decimal digits Robert Wessel <robertwessel2@yahoo.com> - 2015-10-19 16:18 -0500
      Re: How to encode/decode string of decimal digits Eric Sosman <esosman@comcast-dot-net.invalid> - 2015-10-19 21:38 -0400
    Re: How to encode/decode string of decimal digits Jorgen Grahn <grahn+nntp@snipabacken.se> - 2015-10-20 08:00 +0000
  Re: How to encode/decode string of decimal digits Ben Bacarisse <ben.usenet@bsb.me.uk> - 2015-10-19 15:50 +0100
  Re: How to encode/decode string of decimal digits Keith Thompson <kst-u@mib.org> - 2015-10-19 09:01 -0700
  Re: How to encode/decode string of decimal digits Tim Rentsch <txr@alumni.caltech.edu> - 2015-10-19 12:11 -0700
    Re: How to encode/decode string of decimal digits pozz <pozzugno@gmail.com> - 2015-10-20 13:51 +0200
      Re: How to encode/decode string of decimal digits Bartc <bc@freeuk.com> - 2015-10-20 13:38 +0100
        Re: How to encode/decode string of decimal digits glen herrmannsfeldt <gah@ugcs.caltech.edu> - 2015-10-20 16:05 +0000
        Re: How to encode/decode string of decimal digits pozz <pozzugno@gmail.com> - 2015-10-21 09:29 +0200
          Re: How to encode/decode string of decimal digits Bartc <bc@freeuk.com> - 2015-10-21 11:27 +0100
            Re: How to encode/decode string of decimal digits pozz <pozzugno@gmail.com> - 2015-10-21 17:55 +0200
          Re: How to encode/decode string of decimal digits Eric Sosman <esosman@comcast-dot-net.invalid> - 2015-10-21 08:03 -0400
            Re: How to encode/decode string of decimal digits pozz <pozzugno@gmail.com> - 2015-10-21 17:53 +0200
              Re: How to encode/decode string of decimal digits supercat@casperkitty.com - 2015-10-21 09:37 -0700
              Re: How to encode/decode string of decimal digits David Brown <david.brown@hesbynett.no> - 2015-10-22 11:47 +0200
                Re: How to encode/decode string of decimal digits pozz <pozzugno@gmail.com> - 2015-10-22 13:44 +0200
                Re: How to encode/decode string of decimal digits Ben Bacarisse <ben.usenet@bsb.me.uk> - 2015-10-22 13:45 +0100
                Re: How to encode/decode string of decimal digits Ben Bacarisse <ben.usenet@bsb.me.uk> - 2015-10-22 15:51 +0100
                Re: How to encode/decode string of decimal digits supercat@casperkitty.com - 2015-10-22 09:31 -0700
                Re: How to encode/decode string of decimal digits Ben Bacarisse <ben.usenet@bsb.me.uk> - 2015-10-22 20:48 +0100
                Re: How to encode/decode string of decimal digits pozz <pozzugno@gmail.com> - 2015-10-23 10:14 +0200
                Re: How to encode/decode string of decimal digits Ben Bacarisse <ben.usenet@bsb.me.uk> - 2015-10-23 11:14 +0100
                Re: How to encode/decode string of decimal digits Bartc <bc@freeuk.com> - 2015-10-23 11:47 +0100
                Re: How to encode/decode string of decimal digits Ben Bacarisse <ben.usenet@bsb.me.uk> - 2015-10-23 13:22 +0100
                Re: How to encode/decode string of decimal digits David Brown <david.brown@hesbynett.no> - 2015-10-22 15:07 +0200
                Re: How to encode/decode string of decimal digits glen herrmannsfeldt <gah@ugcs.caltech.edu> - 2015-10-22 22:05 +0000
                Re: How to encode/decode string of decimal digits pozz <pozzugno@gmail.com> - 2015-10-23 10:15 +0200
  Re: How to encode/decode string of decimal digits glen herrmannsfeldt <gah@ugcs.caltech.edu> - 2015-10-19 22:02 +0000
  Re: How to encode/decode string of decimal digits supercat@casperkitty.com - 2015-10-20 10:09 -0700

csiph-web