/*
* Program pro testovani funkce pro prevod cisla o zakladu 2 - 36 na retezec
*
* Tomas Kavalek - tom.kavalek@atlas.cz
*/
#define ASSERTDEBUG 0
#include <stdio.h>
#if ASSERTDEBUG
# include <assert.h>
#endif
// Prototyp funkce
int ul2str(unsigned long value, unsigned int base, char *string, int size);
// Funkce prevadi cislo value o zakladu base na retezec o velikosti size
int ul2str(unsigned long value, unsigned int base, char *string, int size) {
#if ASSERTDEBUG
// Kontrola zakladu pomoci ladiciho makra
assert(base > 1 && base < 37);
#else
// Kontrola zakladu pomoci podminky
if(base < 2 || base > 36) return 0;
#endif
// Definice promennych
unsigned int rest = 0; // Zbytek pro ulozeni do pole
unsigned int i = 0, j = 0; // Pomocne iteratory
unsigned int myarray[size]; // Pomocne pole pro ukladani
// Cyklus samotneho vypoctu
do {
rest = value % base; // Zbytek po deleni
value /= base; // Cislo pro dalsi iteraci
myarray[i++] = rest; // Ulozeni zbytku do pole
} while(value > 0); // Cyklus dokud je co pocitat
// Ulozeni vysledku do retezce (pole) predaneho odkazem a jeho otoceni
// s naslednym prevod cislic na pismena, pokud je potreba
while(i-- != 0) {
if(myarray[i] < 10) string[j++] = myarray[i] + '0';
else string[j++] = myarray[i] - 10 + 'A';
}
// Nutne ukonceni retezce
string[j] = '\0';
return 1;
}
// Hlavni funkce
int main(int argc, char **argv) {
// Potrebujeme minimalne dva parametry
if(argc > 2) {
char string[80]; // Pole pro ulozeni retezce
// Prevadime
if((ul2str(atol(argv[1]), atoi(argv[2]), string, 80))) printf("%s\n", string);
else {
printf("%s: nepodarilo se prevest %ld na retezec\n", argv[0], atol(argv[1]));
exit(1);
}
} else printf("%s: pouziti %s <value> <base>\n", argv[0], argv[0]);
return 0;
}