4 votes

C convertir le format hexagonal en décimal

Compilation sous linux avec gcc.

Je voudrais le convertir en hexagone. 10 qui serait un. J'ai réussi à le faire avec le code ci-dessous.

unsigned int index = 10;
char index_buff[5] = {0};
sprintf(index_buff, "0x%x", index);
data_t.un32Index = port_buff;

Cependant, le problème est que je dois l'affecter à une structure et l'élément auquel je dois l'affecter est de type unsigned int.

Cela fonctionne cependant :

data_t.un32index = 0xa;

Cependant, mon code d'exemple ne fonctionne pas car il pense que j'essaie de convertir d'une chaîne de caractères à un nombre entier non signé.

J'ai essayé ceci, mais cela a également échoué

data_t.un32index = (unsigned int) *index_buff;

Merci beaucoup pour tout conseil,

13voto

unwind Points 181987

Hein ? La décimale/hex n'a pas d'importance si vous avez la valeur dans une variable. Il suffit de faire

data_t.un32index = index;

La décimale et l'hexadécimale ne sont que des notations pour l'impression des nombres afin que les humains puissent les lire.

Pour une variable entière en C (ou en C++, ou en Java, ou dans l'un des nombreux langages où ces types sont des "primitives" dont la sémantique est très proche de celle des registres de la machine), on ne peut jamais dire que la valeur qu'elle contient est "en hex".

La valeur est maintenue en binaire (dans tous les ordinateurs électroniques modernes typiques, qui sont numériques et binaires par nature) dans la mémoire ou le registre qui soutient la variable, et vous pouvez ensuite générer diverses représentations de chaînes de caractères, et c'est là que vous devez choisir une base à utiliser.

7voto

Emil H Points 24062

Je suis d'accord avec les réponses précédentes, mais j'ai pensé que je pourrais partager un code qui convertit réellement une chaîne hexagonale en un entier non signé, juste pour montrer comment c'est fait :

#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;
}

Donne ceci lorsqu'il est exécuté :

emil@lanfear /home/emil/dev $ ./hex
33653337357 33653337357
deadbeef deadbeef

2voto

dirkgently Points 56879

Cependant, mon exemple de code ne fonctionne pas car il pense que j'essaie de convertir une chaîne de caractères en un nombre entier non signé.

C'est parce que lorsque vous écrivez ce qui suit :

data_t.un32index = index_buff;

vous faire ont une incompatibilité de type. Vous essayez d'assigner un tableau de caractères index_buff à un unsigned int c'est-à-dire data_t.un32index .

Vous devriez être en mesure d'attribuer le index comme suggéré directement à data_t.un32index .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X