Ich denke, einige Leute, die hier ankommen, suchen vielleicht nur:
%Vor%Sie könnten strtoul verwenden, das durch die Zeichen in der Zeichenfolge laufen und sie konvertieren würde Berücksichtigen Sie die Radix (16 in diesem Zusammenhang), die Sie übergeben: -
%Vor% Wie in den anderen Beispielen gezeigt, gibt es kürzere Wege, aber keiner von ihnen erlaubt es Ihnen, die Verarbeitung fehlerfrei zu überprüfen (was passiert, wenn jemand FFF
übergibt und Sie nur einen unsiged char
haben, um ihn einzufügen ?
z.B. mit sscanf
:
ist falsch, weil argv[1]
vom Typ char *
ist. Wenn argv[1]
etwas wie "0xff"
enthält und Sie den entsprechenden Integer-Wert einem unsigned char
zuweisen möchten, ist es wahrscheinlich am einfachsten, strtoul()
zuerst in unsigned long
und dann in UCHAR_MAX
zu konvertieren Überprüfen Sie, ob der konvertierte Wert kleiner oder gleich cTest
ist. Wenn ja, können Sie einfach strtoul()
zuweisen.
strtoul()
ist eine Basis, die 0 sein kann, um C-artige Zahlenanalyse zu bezeichnen (oktale und hexadezimale Literale sind erlaubt). Wenn Sie nur Base 16 zulassen möchten, übergeben Sie das als drittes Argument an 0xff
. Wenn Sie eine beliebige Basis zulassen möchten (damit Sie 0377
, 255
, UCHAR_MAX
usw. parsen können), verwenden Sie 0.
<limits.h>
ist in %code% definiert.
Der traditionelle Weg, um so etwas in C zu machen, ist scanf () . Es ist genau das Gegenteil von printf (), liest das angegebene Format out der Datei (oder des Terminals) und in die Variablen, die Sie auflisten, anstatt sie in sie zu schreiben.
In Ihrem Fall würden Sie sscanf
verwenden, da Sie es bereits in einer Zeichenfolge und nicht in einem Stream haben.
Tags und Links c base-conversion strtol