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.
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:
(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.)
Um eine Zeichenkette in C ++ in eine Binärdatei zu konvertieren, können Sie stringstream verwenden.
%Vor%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 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()
.
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.
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: Ссылка