Über die Befehlszeile eine Hexadezimalzahl in ein Programm eingeben

7

Ich kann das tun:

%Vor%

Aber was ist der richtige Weg, um eine Hexadezimalzahl über die Befehlszeile in das Programm zu bekommen?

unsigned char cTest = argv[1];

macht den Trick nicht. Das erzeugt eine Initialisierung macht Integer aus Zeiger ohne eine Cast Warnung.

    
Pieter 29.01.2010, 15:15
quelle

6 Antworten

7
%Vor%

Beispielverwendung:

%Vor%     
Greg Bacon 29.01.2010, 15:20
quelle
11

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

%Vor%     
Peter Le Bek 16.07.2011 16:33
quelle
7

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 :

%Vor%     
Ruben Bartelink 29.01.2010 15:19
quelle
4
%Vor%

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.

Der dritte Parameter von

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.

    
Alok Singhal 29.01.2010 15:23
quelle
1

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.

    
T.E.D. 29.01.2010 15:24
quelle
-3

atoi , atol , strtoi , strtol

alle in stdlib.h

    
Pod 29.01.2010 15:21
quelle

Tags und Links