From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Date: Fri, 6 Aug 2010 17:17:19 +0400 From: Alexey Tourbin To: ALT Devel discussion list Message-ID: <20100806131719.GB10200@altlinux.org> Mail-Followup-To: ALT Devel discussion list References: <20100804211817.GB10145@altlinux.org> <20100804212620.GA28494@wo.int.altlinux.org> <20100804213812.GC10145@altlinux.org> <20100804220513.GA9825@wo.int.altlinux.org> <20100805074140.GD10145@altlinux.org> Mime-Version: 1.0 Content-Type: multipart/signed; micalg=pgp-sha1; protocol="application/pgp-signature"; boundary="wzJLGUyc3ArbnUjN" Content-Disposition: inline In-Reply-To: <20100805074140.GD10145@altlinux.org> Subject: Re: [devel] base2 <-> base62 X-BeenThere: devel@lists.altlinux.org X-Mailman-Version: 2.1.12 Precedence: list Reply-To: ALT Linux Team development discussions List-Id: ALT Linux Team development discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 06 Aug 2010 13:17:33 -0000 Archived-At: List-Archive: List-Post: --wzJLGUyc3ArbnUjN Content-Type: text/plain; charset=koi8-r Content-Disposition: inline Content-Transfer-Encoding: quoted-printable On Thu, Aug 05, 2010 at 11:41:40AM +0400, Alexey Tourbin wrote: > =F5=D7=C9=C4=C5=CC =D7 google.com/codesearch, =DE=D4=CF base62 =CC=C5=C7= =CB=CF =D3=C4=C5=CC=C1=D4=D8 =C9=DA base64. > =E1 =C9=CD=C5=CE=CE=CF, =CE=C1=D0=D2=C9=CD=C5=D2, =D7 base64 =CD=CF=D6=CE= =CF =DA=C1=CD=C5=CE=C9=D4=D8 "i" -> "ii", "_" -> "i1", > "/" -> "i2". =EE=C1=D7=C5=D2=CE=CF=C5 =D4=C1=CB =C9 =CE=C1=C4=CF =D3=C4= =C5=CC=C1=D4=D8, =C5=D3=CC=C9 =DE=C9=D3=CC=C5=CE=CE=D9=C8 =C9=C4=C5=CA > =CE=C5 =D0=CF=D1=D7=C9=D4=D3=D1. =F1 =CE=C1=D0=C9=D3=C1=CC =C2=CF=CC=C5=C5 =DC=C6=C6=C5=CB=D4=C9=D7=CE=D5=C0= =D0=D2=CF=C3=C5=C4=D5=D2=D5 =CB=CF=C4=C9=CF=D7=C1=CE=C9=D1, =CB=CF=D4=CF= =D2=C1=D1 =D0=CF=D3=CC=C5 =D3=D0=C5=C3=C9=C1=CC=D8=CE=CF=C7=CF =DA=CE=C1=DE=C5=CE=C9=D1 =CF=D4=CB=D5= =D3=D9=D7=C1=C5=D4 =CE=C5 =C3=C5=CC=D5=C0 =C2=D5=CB=D7=D5, =C1 =D4=CF=CC=D8= =CB=CF =CF=C4=C9=CE =C9=CC=C9 =C4=D7=C1 =C2=C9=D4=C1. =EE=CF =D3 =D0=C5=D2=D7=CF=C7=CF =D2=C1=DA=C1 =D5 =CD=C5=CE=D1 =CF=D0=D1=D4= =D8 =CE=C5 =D0=CF=CC=D5=DE=C9=CC=CF=D3=D8 =CE=C1=D0=C9=D3=C1=D4=D8 =C4=C5= =CB=CF=C4=C9=D2=CF=D7=C1=CE=C9=C5. =EB=D4=CF =C8=CF=DE=C5=D4 =CD=CE=C5 =D0=CF=CD=CF=DE=D8? =F7=CF=D4 =D0=CF= =CC=CE=CF=D3=D4=D8=C0 =CB=CF=C4=C9=D2=CF=D7=C1=CE=C9=C5. =F0=CF=D3=CC=C5 = =C4=C5=CB=CF=C4=C9=D2=CF=D7=C1=CE=C9=D1 =D2=C1=DA=D2=C5=DB=C1=C5=D4=D3=D1, =DE=D4=CF=C2=D9 =CD=C1=D3=D3=C9=D7 bitv[= ] =D3=CF=C4=C5=D2=D6=C1=CC =D7 =CB=CF=CE=C3=C5 =CE=C5=D3=CB=CF=CC=D8=CB=CF = =CC=C9=DB=CE=C9=C8 =CE=D5=CC=C5=CA. const char *bitv_to_base62(int bitc, char bitv[]) { int base62c =3D 0; char *base62v =3D NULL; void put_char(int c) { int realloc_delta =3D 1024; if ((base62c & (realloc_delta - 1)) =3D=3D 0) base62v =3D realloc(base62v, sizeof(*base62v) * (base62c + realloc_delta)= ); base62v[base62c++] =3D c; } void put_digit(int c) { if (c < 10) put_char(c + '0'); else if (c < 36) put_char(c - 10 + 'a'); else if (c < 62) put_char(c - 36 + 'A'); } int i; int bits6 =3D 0; int num6b =3D 0; for (i =3D 0; i < bitc; i++) { if (bits6 < 6) num6b |=3D bitv[i] << bits6++; if (bits6 =3D=3D 6) { switch (num6b) { case 61: put_digit(61); // extra "0" binary bit bits6 =3D 1; num6b =3D 0; break; case 62: put_digit(61); // extra "10" binary bits bits6 =3D 2; num6b =3D 1; break; case 63: put_digit(61); // extra "11" binary bits bits6 =3D 2; num6b =3D 3; break; default: assert(num6b < 61); put_digit(num6b); bits6 =3D 0; num6b =3D 0; break; } } } if (bits6) { assert(num6b < 61); put_digit(num6b); } put_char(0); return base62v; } --wzJLGUyc3ArbnUjN Content-Type: application/pgp-signature Content-Disposition: inline -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.10 (GNU/Linux) iEYEARECAAYFAkxcC18ACgkQfBKgtDjnu0YQqACfQ88b9s53fK/0XI7HmbHt1ce2 0UQAn2pWsUJkCpSNLbeNnTpY2gNucXan =kSb0 -----END PGP SIGNATURE----- --wzJLGUyc3ArbnUjN--