La base 36 est une base de numération positionnelle qui utilise 36 comme base. Le choix de 36 est pratique car il peut être représenté en utilisant les chiffres du système de numération indo-arabe (0-9) et les vingt-six lettres de l'alphabet latin (A-Z). La base 36 est donc le système de numération insensible à la casse le plus compact utilisant les caractères ASCII.

Exemples

Table de conversion : Décimal 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 Sénaire 0 1 2 3 4 5 10 11 12 13 14 15 20 21 22 23 24 25 Base 36 0 1 2 3 4 5 6 7 8 9 A B C D E F G H   Décimal 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 Sénaire 30 31 32 33 34 35 40 41 42 43 44 45 50 51 52 53 54 55 Base 36 I J K L M N O P Q R S T U V W X Y Z

Quelques nombres dans le système décimal, en sénaire et base 36:

DécimalSénaireBase 361111014A1002442S4344RS11 41447PS205 0544255S 3323 3344LFLS 2431 2124 5344GJDGXS 2043 2210 1030 1344CRE66I9S SénaireBase 36Décimal11110010361 0000100100 000010001 0000 000010000100 0000 00001000001 0000 0000 00001000000100 0000 0000 0000100000001 0000 0000 0000 000010000000052 3032 3041 2221 3014WIKIPEDIA FractionDécimalSénaireBase 361/20,50,30,I1/30,0,20,C1/40,250,130,91/50,20,0,1/6 (1/10)0,10,10,61/7 (1/11)0,0,0,1/8 (1/12)0,1250,0430,4I1/9 (1/13)0,0,040,41/10 (1/14)0,10,00,3

Conversion En C static char *base36enc(long unsigned int value) { char base36 = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"; /* log(2**64) / log(36) = 12.38 => max 13 char + '\0' */ char buffer; unsigned int offset = sizeof(buffer);

buffer[--offset] = '\0'; do { buffer[--offset] = base36[value % 36]; } while (value /= 36);

return strdup(&buffer[offset]); // warning: this must be free-d by the user }

static long unsigned int base36dec(const char *text) { return strtoul(text, NULL, 36); }

En Java public class Base36 { public static long decode(final String value) { return Long.parseLong(value, 36);

public static String encode(final long value) { return Long.toString(value, 36);

En PHP The decimal value of 12abcxyz is <?php print base_convert("12abcxyz",36,10); ?>

En Ruby 1412823931503067241.to_s(36) #=> "aqf8aa0006eh" "aqf8aa0006eh".to_i(36) #=> 1412823931503067241

En JavaScript (1234567890).toString(36) // => "kf12oi" parseInt("kf12oi",36) // => 1234567890

En bash Le code suivant fonctionne dans tout shell conforme à la norme POSIX, mais il nécessite le logiciel bc et utilisation de la commande echo avec l'option -n (qui peut poser des problèmes de compatibilité). b36(){ b36arr=(0 1 2 3 4 5 6 7 8 9 A B C D E F G H I J K L M N O P Q R S T U V W X Y Z) for i in $(echo "obase=36; $1"| bc) do echo -n ${b36arr[${i#0}]} done echo }

Notes et références

36 Catégorie:Calcul informatique Catégorie:Calcul numérique