W tym poście opiszę w jaki sposób dokonać zmiany z postaci liczbowej całkowitej do postaci znakowej.
Aby dokonać takiej konwersji najlepiej wykorzystać funckję itoa.
Poniżej przedstawiłem kod podanej funkcji wraz z komentarzem.
Jako jej argumenty należy podać odpowiednio wartość jaka ma ulec konwersji, wskaźnik do zmiennej znakowej w której zostanie przechowywana zamieniona wartość oraz podstawę wartości konwertowanej. W tym przypadku do wyboru jest system dwójkowy, dziesiętny oraz szesnastkowy.
Druga funkcja wykorzystywana przez itoa pozwala na odwrócenie kolejności w zapisie danych. Przez co otrzymuje się na wyjściu zmienną znakową w kolejności początkowej:
Aby dokonać takiej konwersji najlepiej wykorzystać funckję itoa.
Poniżej przedstawiłem kod podanej funkcji wraz z komentarzem.
char* itoa(int value, char* buffer, int base) { //tablica znaków static const char digits[]="0123456789abcdef"; //Zmienne char* buffer_copy=buffer; int32_t sign=0; int32_t quot,rem; //Jeśli podstawa jest większa lub równa 2 oraz mniejsza lub równa 16 //wtedy wykonaj funkcję if ((base>=2)&&(base<=16)) { //Jeśli wartosc podstawy 10, oraz zmienna ze znakiem minus, //wtedy dokonaj zamiany na wartość dodatnią. if (base == 10 && (sign = value) < 0) value = -value; do { //Obliczenie zmiennej quot poprzez podzielenie wartości przez jej bazę quot=value/base; //Podzielenie wartości przez bazę, zwracana wartość bez reszty rem=value%base; //Przypisanie wartości zmiennej do wartości char *buffer++ = digits[rem]; //pętla wykonywana do momentu aż jest co dzielić, kończy //działąnie kiedy value = wartości quot } while ((value=quot)); //Sprawdzenie czy wartość była negatywna if (sign<0) //Jeśli tak to przypisanie znaku *buffer++='-'; //Wykorzystanie funkcji reverse do odwrócenia wartości na string __reverse(buffer_copy,buffer-1); //Dodanie znaku na końcu linii *buffer='\0'; //zwrócenie wartości w formacie string return buffer_copy; }
Jako jej argumenty należy podać odpowiednio wartość jaka ma ulec konwersji, wskaźnik do zmiennej znakowej w której zostanie przechowywana zamieniona wartość oraz podstawę wartości konwertowanej. W tym przypadku do wyboru jest system dwójkowy, dziesiętny oraz szesnastkowy.
Druga funkcja wykorzystywana przez itoa pozwala na odwrócenie kolejności w zapisie danych. Przez co otrzymuje się na wyjściu zmienną znakową w kolejności początkowej:
static void __reverse(char* begin,char* end) { char temp; while (end>begin) { temp=*end; *end--=*begin; *begin++=temp; } }