Wie konvertieren von Hexadezimal zu Dezimal?

Ich habe verschiedene Hex-Daten kommen und die gespeicherte in ein integer-Typ zu registrieren.

Wenn ich fprint kann ich das folgende sehen:

0x3076
0x307c
.
.
.

Allerdings würde ich mag, um zu zeigen, eine Dezimale version der oben-erwähnt Hex-Daten wie folgt.

12406
12412
.
.
.

In der Theorie, sagen wir mal für den ersten Wert, den Sie tun, die folgenden in das Dezimalformat konvertieren.

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

Also WENN ich die Charakter-basierte version von "message = 0x3076" und auch, WENN ich in der Lage bin, um jedes einzelne Zeichen 6 - 7 - 0 - 3 ich kann die Berechnung der Dezimalzahl!

So, ich beschlossen, zu teilen "3076" von 1000. Ich wurde erwartet, zu bekommen 3, ich habe aber ZWEI Zeichen statt! allerdings, wenn ich in der Lage war, 3 für den Rest der "307c" ich bin nicht in der Lage zu bekommen, "C". Wenn es dezimal dies funktioniert möglicherweise nicht hex!

Auch, ich habe versucht, " strtol " - Befehl. Ich verwende Cygwin zu kompilieren meines Codes, ich bin nicht sicher, wo der Fehler ist! Was habe ich falsch gemacht?

So, ich muss nur einen Weg finden, wie JEDES EINZELNE Zeichen aus der HEX-Daten!

Jede Idee bitte?

P. S.

Hier ist mein code, um zu helfen, Sie geben mir eine Idee.

   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

.
.
.

  • Wenn die Zahl in eine integer-variable, dann ist es nicht gespeichert in hex. Du bist einfach der (vermutlich?) drucken Sie es aus, wie hex mit fprintf, mit dem %x-Planer. Drucken Sie die gleiche Zahl mit %u statt.
  • Sie müssen wirklich, veröffentlichen Sie Ihren code und Ihre genauen ein-und Ausgang, wenn Sie wissen möchten, warum es falsch ist.
  • Vane; ich habe gerade meinen code. Danke!
  • ooga: Wenn ich die anderen als "%p", werde ich mir eine falsche Zahl! Woher ich das weiß? Denn es sollte geben Sie mir einige zahlen rund 120 V, die meine Spannung!
InformationsquelleAutor H2019 | 2015-06-26
Schreibe einen Kommentar