C convertido hex para o formato decimal
Pergunta
A compilação no Linux usando o gcc.
Eu gostaria de converter isso em hex. 10, que seria um. Eu consegui fazer isso vontade o código abaixo.
unsigned int index = 10;
char index_buff[5] = {0};
sprintf(index_buff, "0x%x", index);
data_t.un32Index = port_buff;
No entanto, o problema é que eu preciso atribuí-la a uma estrutura e o elemento que eu preciso atribuir a é um tipo int não assinado.
Isso funciona no entanto:
data_t.un32index = 0xa;
No entanto, o meu código de exemplo não funciona como ele pensa que eu estou tentando converter a partir de uma string para um int não assinado.
Eu tentei isso, mas esta também falhou
data_t.un32index = (unsigned int) *index_buff;
Muito obrigado por qualquer conselho,
Solução
Huh? O decimal / hex Não importa se você tem o valor em uma variável. Basta fazer
data_t.un32index = index;
Decimal e Hex são notação apenas ao imprimir números para os seres humanos podem lê-los.
Para um C (ou C ++ ou Java, ou qualquer de um número de línguas em que estes tipos são "primitivos" com a semântica correspondência de perto aqueles de registradores da máquina) inteiro variável, o valor detém, nunca pode ser dito de "ser em hexadecimal".
O valor é mantido em binário (em todos os computadores eletrônicos modernos típicos, que são digitais e de natureza binária) na memória ou registre-se apoiando a variável, e você pode, então, gerar várias representações de seqüência, que é quando você precisa escolher uma base para uso.
Outras dicas
Eu concordo com as respostas anteriores, mas eu pensei que eu iria partilhar código que realmente converte uma string hexadecimal para um inteiro sem sinal apenas para mostrar como é feito:
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
char *hex_value_string = "deadbeef";
unsigned int out;
sscanf(hex_value_string, "%x", &out);
printf("%o %o\n", out, 0xdeadbeef);
printf("%x %x\n", out, 0xdeadbeef);
return 0;
}
Dá isso quando executado:
emil@lanfear /home/emil/dev $ ./hex
33653337357 33653337357
deadbeef deadbeef
No entanto, o meu código de exemplo não funciona como ele pensa que eu estou tentando converter a partir de uma string para um int não assinado.
Isso ocorre porque quando você escreve o seguinte:
data_t.un32index = index_buff;
você do tem uma incompatibilidade de tipo. Você está tentando atribuir um index_buff
array de caracteres para um unsigned int
data_t.un32index
ou seja.
Você deve ser capaz de atribuir o index
como sugerido diretamente para data_t.un32index
.