Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <ctype.h>
- #include <string.h>
- #include <math.h>
- /************************************************************************************
- * @brief Converte uma sequência númerica para uma outra sequência númerica com outra base.
- *************************************************************************************
- * @param source A fonte que será convertida
- * @param baseSource A base que a fonte está (binário = 2, octal = 8, decimal = 10, hex = 16, etc)
- * @param dest O vetor de destino que irá conter o valor convertido
- * @param base A base para o qual o destino será retornado
- *************************************************************************************/
- void convert(const char *source, int baseSource, char *dest, int base)
- {
- int sourceBase10 = 0;
- if(baseSource != 10) {
- int i;
- int expoent = 0;
- for(i = strlen(source) - 1; i > -1; i--) {
- int digit = (source[i] > '9') ? (toupper(source[i]) - 55) : (source[i] - 48);
- int tmp = digit * pow(baseSource, expoent);
- sourceBase10 = sourceBase10 + tmp;
- expoent = expoent + 1;
- }
- }
- else {
- sourceBase10 = atoi(source);
- }
- int dividendo = sourceBase10;
- int pos = 0;
- while(dividendo >= base) {
- int r = dividendo % base;
- dest[pos] = r >= 10 ? (r + 55) : (r + 48);
- pos++;
- dividendo = dividendo / base;
- }
- dest[pos] = dividendo >= 10 ? (dividendo + 55) : (dividendo + 48);
- dest[pos + 1] = '\0';
- size_t size = strlen(dest);
- int i;
- for(i = 0; i < size / 2; i++) {
- char tmp = dest[i];
- dest[i] = dest[size - i - 1];
- dest[size - i - 1] = tmp;
- }
- }
- /* Exemplos de uso */
- int main(void)
- {
- char buffer[16]; /* buffer com precisão de 15 dígitos, ou seja: int32 */
- /* converte 745(base 10) para hex (base 16) */
- convert("745", 10, buffer, 16);
- printf("%s(base 16)\n", buffer);
- /* converte 745(base 10) para binário (base 2) */
- convert("745", 10, buffer, 2);
- printf("%s(base 2)\n", buffer);
- /* converte 1011101001(base 2) para decimal (base 10) */
- convert("1011101001", 2, buffer, 10);
- printf("%s(base 10)\n", buffer);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement