Konvertieren von ASCII-string in Dezimal-und Hexadezimal-Darstellungen
Brauche ich zum konvertieren einer ASCII-Zeichenfolge, wie... "hello2" in dezimal-und, oder mit der hexadezimalen Darstellung (ein numerischer form, die spezifische Art, ist irrelevant). So, "Hallo" wäre : 68 65 6c 6c 6f 32 in HEX. Wie mache ich das in C++, ohne nur mit einem riesigen if-Anweisung?
EDIT: Okay, so ist dies die Lösung, die ich ging mit:
int main()
{
string c = "B";
char *cs = new char[c.size() + 1];
std::strcpy ( cs, c.c_str() );
cout << cs << endl;
char a = *cs;
int as = a;
cout << as << endl;
return 0;
}
- Sie können implictly konvertieren Sie einen beliebigen char zu dessen ascii-Wert durch tun
char a = 'B'; int as = a;
<- Erträge 66 (ascii-Wert) - Ich mag diesen trick. Meine einzige Frage ist jetzt, wie konvertiere ich einen string in dieser Art und Weise? Ich denke, die Frage ist wirklich, wie kann ich das gleichsetzen ein einzelnes element in einen string ("a")?
- Sie können es in einer for-Schleife Zeichen für Zeichen.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie printf() zu schreiben, das Ergebnis auf die Standardausgabe oder verwenden Sie sprintf /snprintf zu schreiben das Ergebnis in einen string. Der Schlüssel hier ist die %X im format-string.
Wenn der Umgang mit einem C++ - std::string, könnten Sie die Zeichenfolge c_str () - Methode ergeben ein C-Zeichen-array.
Nur drucken Sie es aus in hex, so etwas wie:
Chancen sind, werden Sie wollen, um die Genauigkeit und Breite zu geben immer 2-stellig und so, aber die Grundidee bleibt die gleiche. Persönlich, wenn ich es tun würde ich wahrscheinlich verwenden
printf("%.2x");
, wie es auch das richtige mit deutlich weniger Aufwand.Ein string ist nur ein array von
char
s, also alles, was Sie tun müssen, ist die Schleife aus0
zustrlen(str)-1
, und verwenden Sieprintf()
oder etwas ähnliches format jedes Zeichen als dezimal - /hexadezimal.std::string
. Wie andere haben darauf hingewiesen, mitprintf()
ist deutlich weniger ausführlich als C++ - stream-Formatierung.operator<<
überlastet ist und die überlastung, die einenint
(odershort
,long
usw.) für diehex
- flag, um einen Effekt (d.h., die überlast fürchar
ignoriert diehex
flag).