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,

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top