Comment faire pour convertir en Hexadécimal en Décimal?

J'ai différentes données hexadécimales sont à venir et stockées dans un entier de type registre.

Lorsque j'utilise fprint je peux voir les suivants:

0x3076
0x307c
.
.
.

Cependant, je tiens à montrer une Virgule version au-dessus de la mention Hex de données comme suit.

12406
12412
.
.
.

En théorie, disons que pour la première valeur, vous effectuez les opérations suivantes à convertir en décimal.

(6* 16^0)+(7 * 16^1)+(0*16^2)+(3*16^3)=6 + 112+ 0 + 12288 = 12406

Donc, SI j'ai le caractère basé sur la version de "0x3076" et aussi, SI je suis en mesure d'obtenir chacun des personnages 6 - 7 - 0 - 3, je peux calculer les décimales montant!

Alors, j'ai décidé de diviser "3076" par 1000. J'étais attendu à trouver 3, mais j'ai eu DEUX caractères à la place! cependant, si j'étais en mesure d'obtenir 3 pour le reste de "307c" je ne suis pas en mesure d'obtenir un "C". Si c'était décimal ce serait pas hex!

Aussi, j'ai essayé "strtol de la commande". Comme je l'ai utiliser Cygwin pour compiler mon code, je ne suis pas sûr de l'endroit où l'erreur est! Qu'ai-je fait de mal?

Donc, j'ai juste besoin de trouver un moyen d'obtenir CHAQUE caractère UNIQUE de l'HEX de données!

Aucune idée de s'il vous plaît?

P. S.

Voici mon code afin de vous aider à me donner une idée.

   int get_readings(int source, int phase, int max_tries)
{
    uint8_t buf[MAX_IEC1107_MSG_BODY];
    uint8_t inbuf[MAX_IEC1107_MSG_BODY];
    int inlen;
    uint8_t *s;
    int32_t value;
    int status;
    double voltage;
    double current;
    double active_power;
    double reactive_power;
    double apparent_power;
    double power_factor;
    double frequency;

    s = buf;
    *s++ = HOST_CMD_GET_READINGS_PHASE_1 + phase;
    *s++ = 0x00;
    if (max_tries != 1)
        meter_set_max_tries(&emeter[source].meter_msg, max_tries);
    if (meter_exchange(&emeter[source].meter_msg, buf, 2, inbuf, &inlen)
        &&
        inbuf[1] != 0xFF)
    {
        emeter[source].no_response = FALSE;
        s = inbuf;
        /* Get current readings */
        value = (s[3] << 8) | s[2];

        fprint(stderr, "value:" %p\n, value); //this give me HEX code

.
.
.

  • Si le nombre est une variable de type entier, il n'est pas stockée dans l'hex. Vous êtes juste (sans doute?) l'impression que hex avec fprintf, à l'aide de l' %x spécificateur. Essayez d'imprimer les mêmes chiffres avec %u à la place.
  • Vraiment vous devez poster votre code et votre exacte d'entrée et de sortie, si vous voulez savoir pourquoi c'est mal.
  • Girouette; j'ai juste ajouté mon code. Merci!
  • ooga: Quand j'utilise les autres que "%p", je vais obtenir un mauvais numéro! Comment puis-je savoir? Parce qu'il devrait me donner quelques chiffres autour de 120 V qui est ma tension!
InformationsquelleAutor H2019 | 2015-06-26