Base 16 para Base 10 em C

G

GrandAlf

Guest
Eu me sinto tolo, mas parece que não pode minha cabeça redonda este. Eu estou tentando converter números de base 16 (sem letras AF utilizado) para base 10 de acordo com o seguinte. B16 0x47 = Dez 71. B16 0x16 = 22 de dezembro. B16 0x30 = Dez 48. B16 0x01 = Dez Qualquer um Etc 1 tem uma rotina para fazer isso?. Como eu disse nenhum dos números B16 conter quaisquer caracteres hexadecimais, tudo são números normais. Parece tão óbvio, mas eu só tenho um ponto cego aqui. Pode, obviamente, exibir em qualquer formato usando printf, mas não é isso que eu sou depois. Algum conselho mais recebidas com gratidão.
 
A questão não é de todo claro. Hex ou decimal são apenas representações para impressão de formatos de dados internos, que são sempre binário. Para obter uma representação decimal em uma string, sprintf () ou itoa () C-funções podem ser usadas. Se você pretende uma representação diferente do que uma seqüência de impressão ou formato binário interno, você deve especificá-lo. Há, naturalmente, formatos como BCD, que representam um dígito decimal dois em 8 bits, mas não há nada em seu post que sugere ele. Basta dizer, o que você deseja alcançar!
 
lembre-se da linguagem C podem compreender número em toda Hex ou seja, formato binário, decimal, octal. que você acabou de declarar isso, mas tudo significa mesmo por exemplo, um 0x04 =; Hex 4 a = 4; decimal 4 a = 04; octal 4 a = 0b100; binário de 4
 
Talvez eu não me explicar corretamente. Estou tentando tirar uma variável numérica (sem cordas) que contém uma representação número binário de um número hexadecimal, e converter isso em outro número binário que representa um número decimal. Estes é sempre dados numéricos, AF nunca é utilizado. por exemplo, Hex 0-9 seria o mesmo em decimal 0-9 claro. Nenhuma conversão. Se a entrada é de 30 a hex decimal deve sair em 48. Mesmo com outros exemplos no post inicial. I pode, obviamente, fazer uma tabela de conversão, mas uma fórmula seria uma opção muito melhor. Effectivly Hex para Decimal sem as letras. Espero que isso faz sentido.
 
GrandAlf, é este o tipo de coisa você está procurando como uma idéia geral
Code:
 int HexToDec (nNumToConvert int) / / recursive fn {int nConverted = 0; / / Limpar para este nQuotient int cálculo; nRemainder int; nQuotient = (nNumToConvert / 16); nRemainder = (% nNumToConvert 16) / / pode usar operador ternário '?' mas esta 'se ... else' é mais clara. if (nQuotient = 0) {nConverted = nRemainder;} else {nConverted = (16 * HexToDec (nQuotient) + nRemainder);} return (nConverted);}
 
Isto parece-me no caminho certo, vai ter um jogo ao redor com ele. Muito obrigado pela sua entrada.
 
Se a entrada é de 30 a hex decimal deve sair em 48. Mesmo com outros exemplos no post inicial.
Desculpe, mas eu não chegar ao ponto. 0x30 é representada pelo código de bits 00110000, decimal 48 é representado o mesmo bits de código. PS: Se você está falando da representação BCD (decimal codificado binário), como eu pedi antes, isso é não "um número binário que representa um número decimal" em vez de um número binário de quatro bits que representa cada dígito. PPS: Um binário para BCD conversão é assim:
Code:
 enquanto (num> 0) {dígitos [n] = num% base num = Num / base; n + +;}
 
Só não passar um número hexadecimal de 5 dígitos para ele, ou alterar as variáveis ​​relevantes para longo. DOH! esta pode ser outra resposta, eu apenas corri-lo sob Lcc ..
Code:
 / * Conversão de hexadecimal seqüência de entrada formatada à sua Decimal vai aceitar qualquer seqüência hexadecimal válido * / int main () {int a; while (1) {printf ("Digite um número hexadecimal:"); scanf (x% " ", & a); / / string de entrada hex formatado printf (" É o mesmo que% Decimal d \ n \ n ", a); / / dezembro de saída formato de retorno} 0;}
pode ser capaz de executar um variação desta, para a sua finalidade.
 
Foi a partir de um trecho de código que eu peguei. Olhando para ele de novo, é claro que é BCD. Eu não posso acreditar que eu perdi isso. Apenas alguns dias eu não tenho o meu cérebro na engrenagem. Muito obrigado a vocês dois por me colocar no caminho certo.
 
Basta reler a minha explicação, não admira que causou confusão. Naturalmente 0x30 é o mesmo que 48 etc O que eu estava realmente tentando alcançar estava mudando o número hexadecimal para decimal, mas mantendo o mesmo valor. Assim como os 0x47 exemplo (01.000.111) seria actualy tornar dezembro 47 (00.101.111). É, de facto, o oposto do seguinte. / / Converte BCD 1 byte a byte HEX 1 / / ------------------------------- unsigned char BCD2HEX (unsigned int bcd ) {unsigned char temporário; temp = ((bcd >> 8) * 100) | ((bcd >> 4) * 10) | (bcd & 0x0f); temperatura de retorno;} Tentando fazer Hex para BCD vez, e não ficar muito direito. Desculpe, ontem foi apenas um daqueles dias agitados, não pensar logicamente em tudo. [Size = 2] [color = # 999999] Adicionado após 2 minutos: [/color] [/size] O rosto sorridente deve ser um 8!
 

Welcome to EDABoard.com

Sponsor

Back
Top