Frage

Ich kann dies tun:

int main(int argc, char** argv) {
  unsigned char cTest = 0xff;
  return 0;
}

Aber was ist der richtige Weg, um eine hexadezimale Nummer über die Befehlszeile in das Programm zu bringen?

unsigned char cTest = argv[1];

tut nicht den Trick. Das produziert a Die Initialisierung macht Ganzzahl aus Zeiger ohne Guss Warnung.

War es hilfreich?

Lösung

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
  printf("%ld\n", strtol(argv[1], NULL, 16));

  return 0;
}

Beispiel Verwendung:

$ ./hex ff
255

Andere Tipps

Ich denke, einige Leute, die hier ankommen, suchen vielleicht nur nach:

$ ./prog `python -c 'print "\x41\x42\x43"'`
$ ./prog `perl -e 'print "\x41\x42\x43"'`
$ ./prog `ruby -e 'print "\x41\x42\x43"'`

ja, machen Sie einfach eine einfache Ajax-Anfrage.Mit jquery wäre es: generasacodicetagpre.

und Ihr PHP: generasacodicetagpre.

note

Sie müssen Ihren Eingabefeldern Namen-Attribute hinzufügen.

unsigned char cTest = argv[1];

ist falsch, weil argv[1] ist vom Typ char *. Wenn argv[1] enthält so etwas wie "0xff" und Sie möchten den Ganzzahlwert zuweisen, der dem einem entspricht unsigned char, Der einfachste Weg wäre wahrscheinlich zu benutzen strtoul() zuerst in eine konvertieren unsigned long, und dann prüfen, ob der konvertierte Wert kleiner als oder gleich ist UCHAR_MAX. Wenn ja, können Sie einfach zuweisen cTest.

strtoul()Der dritte Parameter ist eine Basis, die 0 sein kann, um die Analyse des C-Stils zu bezeichnen (Oktal- und Hexadezimalliterale sind erlaubt). Wenn Sie nur Basis 16 zulassen möchten, geben Sie dies als drittes Argument an, um strtoul(). Wenn Sie eine Basis zulassen möchten (damit Sie analysieren können 0xff, 0377, 255, usw.), verwenden Sie 0.

UCHAR_MAX ist definiert in <limits.h>.

Die traditionelle Art, so etwas in C zu tun, ist mit scanf (). Es ist genau die Umkehrung von printf (), das das angegebene Format liest aus der Datei (oder Terminal) und in die von Ihnen aufgeführten Variablen, anstatt sie in sie zu schreiben.

In Ihrem Fall würden Sie verwenden sscanf Wie Sie es bereits in einer Zeichenfolge als in einem Stream bekommen haben.

atoi, atol, strtoi, strtol

Alles in stdlib.h

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top