Wie konvertiert man char * in C ++ in einen unsigned short

8

Ich habe eine char* name , die eine String-Repräsentation der Kurzform ist, die ich möchte, wie zB "15", und diese als unsigned short unitId in eine Binärdatei ausgeben muss. Diese Besetzung muss auch plattformübergreifend kompatibel sein.

Ist dies die richtige Besetzung: unitId = unsigned short(temp);

Bitte beachte, dass ich Anfänger bin, um binär zu verstehen.

    
Elpezmuerto 23.06.2010, 15:18
quelle

6 Antworten

14

Ich nehme an, dass Ihre char* name eine Zeichenfolge Repräsentation der gewünschten Kurzform enthält, d. h. "15" .

Weist nicht char* direkt auf einen Nicht-Zeigertyp zu. Umwandlungen in C ändern die Daten tatsächlich nicht (mit ein paar Ausnahmen) - sie informieren lediglich den Compiler, dass Sie einen Typ in einen anderen Typ behandeln wollen. Wenn Sie char* auf unsigned short umwandeln, nehmen Sie den Wert des -Zeichens (der nichts mit dem Inhalt zu tun hat), indem Sie alles abschneiden, was nicht hineinpasst a short , und dann den Rest wegwerfen. Das ist absolut nicht das, was du willst.

Verwenden Sie stattdessen die Funktion std::strtoul , die eine Zeichenkette analysiert und Ihnen den Text zurückgibt gleichwertige Nummer:

%Vor%

(Sie müssen immer noch einen Cast verwenden, weil strtoul einen unsigned long zurückgibt. Dieser Cast liegt jedoch zwischen zwei verschiedenen Integer-Typen und ist daher gültig. Das Schlimmste, was passieren kann, ist die Zahl in name ist zu groß, um in eine short zu passen - eine Situation, an der Sie woanders nachsehen können.)

    
JSBձոգչ 23.06.2010, 15:24
quelle
9
%Vor%     
fredoverflow 23.06.2010 15:28
quelle
5

Um eine Zeichenkette in C ++ in eine Binärdatei zu konvertieren, können Sie stringstream verwenden.

%Vor%     
Amardeep AC9MF 23.06.2010 15:29
quelle
2

diese Umwandlung wird Ihnen eine (abgeschnittene) ganzzahlige Version des Zeigers geben, vorausgesetzt, dass temp auch ein char * ist. Dies ist fast sicher nicht das, was Sie wollen (und die Syntax ist auch falsch). Schau dir die Funktion atoi an, es kann sein, was du brauchst, z.B. unitId = (vorzeichenlos kurz) (atoi (temp)); Beachten Sie, dass dabei davon ausgegangen wird, dass (a) temp auf eine Ziffernfolge verweist und (b) die Ziffern eine Zahl darstellen, die in eine unsigned short

passen kann     
Chris Card 23.06.2010 15:22
quelle
0

Ist der -Zeiger name die ID oder die Zeichenkette, auf die name zeigt? Das heißt, wenn name "1234" enthält, müssen Sie 1234 an die Datei ausgeben? Ich gehe davon aus, dass dies der Fall ist, da der andere Fall, den Sie mit unitId = unsigned short(name) machen würden, sicherlich falsch ist.

Was Sie dann wollen, ist die Funktion strtoul() .

%Vor%

Seien Sie vorsichtig beim Schreiben von binären Werten in eine Datei; Das Ergebnis der offensichtlichen Sache mag jetzt funktionieren, wird aber wahrscheinlich nicht tragbar sein.

    
Tim Schaeffer 23.06.2010 15:32
quelle
0

Wenn Sie eine Zeichenkette (char * in C) einer Zahl haben, müssen Sie die entsprechende Funktion verwenden, um diese Zeichenkette in den numerischen Wert zu konvertieren, den sie darstellt.

Dafür gibt es mehrere Funktionen. Sie sind hier dokumentiert: Ссылка

    
Nick Smith 23.06.2010 16:11
quelle

Tags und Links