Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<iostream>
- #include<stdio.h>
- #include<conio.h>
- int SymbolCodeToInt(char c, int b)
- {
- if (b <= 10 && c >= '0' && c <= '0' + b - 1) // cifra in baza b
- {
- c -= '0'; // se obtine cifra
- }
- else if (b <= 16 && c >= 'A' && c <= 'A' + b - 1) // cifra hexazecimala scrisa cu litera mare
- {
- c += 10 - 'A';
- }
- else if (b <= 16 && c >= 'a' && c <= 'a' + b - 1) // cifra hexazecimala scrisa cu litera mica
- {
- c += 10 - 'a';
- }
- return c;
- }
- unsigned long long StrToInt(const char string[], int nS, int b)
- {
- int j;
- unsigned long long I = 0;
- for (j = 0; j < nS; ++j) // parcurgem fiecare caracter din sirul de intrare
- {
- // transformam caracterul in valoare, depinzand de pozitia in codul ASCII
- // apoi folosim formula din laborator
- I = I * b + SymbolCodeToInt(string[j], b);
- }
- return I;
- }
- char IntToSymbolCode(int i, int b)
- {
- if (i <= 9 && i >= 0) // cifra in baza 10
- {
- return (char)i + '0'; // se obtine cifra
- }
- else if (i >= 10) // cifra hexazecimala
- {
- return (char)i - 10 + 'A';
- }
- return '?';
- }
- void Reverse(char S[], int nS) // Little Endian => Big Endian
- {
- int j = 0;
- int k = nS - 1;
- char aux;
- while (j < k)
- {
- aux = S[j];
- S[j] = S[k];
- S[k] = aux;
- j++;
- k--;
- }
- }
- int IntToStr(unsigned long long I, int b, char S[])
- {
- int nS = 0; // numarul de caractere ale sirului format
- do {
- S[nS++] = IntToSymbolCode((int)(I % b), b);
- I /= b;
- } while (I != 0);
- S[nS] = '\0';
- Reverse(S, nS);
- return nS;
- }
- void Converteste(const char numar[], size_t nrCifre, int bazaInitiala, int bazaFinala, char rezultat[])
- {
- IntToStr(StrToInt(numar, (int)nrCifre, bazaInitiala), bazaFinala, rezultat);
- }
- int main() {
- char numar[100];
- char rezultat[100];
- int bI, bF;
- printf("Introduceti numarul ca sir de caractere: ");
- fgets(numar, 99, stdin);
- numar[strlen(numar) - 1] = '\0';
- printf("Introduceti baza de numeratie in care este numarul %s: ", numar);
- scanf_s("%d", &bI);
- printf("Introduceti baza de numeratie in care sa fie convertit numarul %s: ", numar);
- scanf_s("%d", &bF);
- Converteste(numar, strlen(numar), bI, bF, rezultat);
- printf("Numarul %s din baza %d in baza %d este: %s\n", numar, bI, bF, rezultat);
- Converteste(rezultat, strlen(rezultat), bF, bI, numar);
- printf("Numarul %s convertit inapoi, din baza %d in baza %d este: %s\n", rezultat, bF, bI, numar);
- _getch();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement