KAVALEK.NET 
-Blog
Linux Web development C/C++ Python LaTeX Rallye Ostatní
-Projekty
PyGaM PHP WIS Class PHP Atom Class
-Webdesign
Nabídka Reference
-Ostatní
Aktuality Odkazy Informace
-Osobní
Kontakt CV
-Intranet
Mail server Print server Security camera

KUBUNTU
XHTML Valid
Smarty
jQuery
View Tomáš Kavalek's profile on LinkedIn

C/C++: Funkce pro převod čísla na řetězec o libovolném základu - ul2str()

Zobrazit obsah
Zobrazit komentáře | Zobrazit pouze komentáře

Program v jazyce C převádí číslo typu unsigned long na řetězec. Zdrojový kód se zvýrazněnou syntaxí je možné si prohlédnout zde a samotný kód zde.

/*
 * 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;
}

28.05.2006 13:11:59 - 1254x
Hodnocení (172)

Rating - 50% 50%

DOBRÉ | ŠPATNÉ

Komentáře k tématu 'Funkce pro převod čísla na...' (0 komentářů)

Vložit komentář | Zobrazit pouze komentáře | Nahoru
Ještě nebyl vložen žádný komentář. Pro vložení prvního komentáře klikněte zde.

Vyhledávání

 
Google

Reklama

Knihy
© 2004 - 2008 Tomáš Kavalek - Obsah webu, zdrojové kódy a projekty lze používat a dále šířit dle GNU GPL. V diskuzích mně můžete tykat.