Eine hexadezimale Zeichenkette in C effizient in eine ganze Zahl umwandeln?

Was ist in C der effizienteste Weg, um eine Zeichenkette aus Hexadezimalziffern in einen binären "vorzeichenlosen int" oder "vorzeichenlosen long" umzuwandeln?

Wenn ich zum Beispiel 0xFFFFFFFE habe, möchte ich einen int mit dem Base10-Wert 4294967294.

Lösung

Versuchen Sie dies:

#include 
int main()
{
    char s[] = "fffffffe";
    int x;
    sscanf(s, "%x", &x);
    printf("%u\n", x);
}
Kommentare (1)

@Eric

Warum wird eine funktionierende Lösung abgelehnt? Sicher, es ist hässlich und vielleicht nicht der schnellste Weg, aber es ist lehrreicher als "strtol" oder "sscanf" zu sagen. Wenn Sie es selbst versuchen, werden Sie etwas darüber lernen, wie die Dinge unter der Haube ablaufen.

Ich glaube nicht, dass Ihre Lösung abgelehnt werden sollte, aber ich vermute, dass es daran liegt, dass sie weniger praktisch ist. Die Idee bei der Abstimmung ist, dass die beste Antwort an die Spitze kommt, und während Ihre Antwort vielleicht aufschlussreicher darüber ist, was unter der Haube passiert (oder wie es passieren könnte), ist es definitiv nicht der beste Weg, um Hex-Zahlen in einem Produktionssystem zu analysieren.

Nochmals, ich glaube nicht, dass an Ihrer Antwort aus pädagogischer Sicht etwas falsch ist, und ich würde sie sicherlich nicht ablehnen (und habe es auch nicht getan). Lassen Sie sich nicht entmutigen und hören Sie auf zu posten, nur weil einigen Leuten eine Ihrer Antworten nicht gefallen hat. Das kommt vor.

Ich bezweifle, dass Sie sich durch meine Antwort besser fühlen, weil Ihre Antwort abgelehnt wurde, aber ich weiß, dass es nicht besonders lustig ist, wenn man fragt, warum etwas abgelehnt wurde und niemand antwortet.

Kommentare (2)