hallo,
ich habe einen String (in c++) den ich in die einzelnen Zeichen zerlegen will.
geht das? und wie ?
so etwas meine ich aber irgendwie funktioniert da bei mir etwas nicht
Die Übung:
Definieren Sie einen char-Zeiger und eine long-Variable. Die long-Variable ist mit dem Hex-Wert 0x12345678L zu initialisieren.
Stellen Sie dann die Ausgabe auf Hex um. Zusätzlich soll bei allen nachfolgenden Ausgaben die eingestellte Zahlenbasis mit ausgegeben werden (cout-Flags!).
Geben Sie zunächst den Inhalt der long Variablen aus. Anschließend ist der Inhalt der long Variable in Byte-Darstellung auszugeben, so wie unten angegeben.
Hinweis: Verwenden Sie dazu den char-Zeiger. Die unten stehende Ausgabe gilt nur bei Prozessoren, bei denen das Low-Byte auch auf der niederen Adresse liegt. Bei anderen Prozessoren erhalten Sie eine umgekehrte Ausgabe.
Zum Schluss ist der char-Zeiger auf die Adresse des String-Literal "ABCD" zu setzen. Der String ist dann mithilfe des char-Zeigers in einzelne Buchstaben zu zerlegen und auszugeben (siehe Programmausgabe unten).
Die Programmausgabe:
0x12345678 liegt wie folgt im Speicher:
0x78,0x56,0x34,0x12
String ist: ABCD
In Buchstaben: A,B,C,D
String in einzelne Zeichen zerlegen
String in einzelne Zeichen zerlegen
cu L@w
---
LINUX - because booting is for adding hardware!
---
LINUX - because booting is for adding hardware!
Das setzen der cout-flags überlasse ich jetzt mal dir.
Theoretisch müsstest du "i < sizeof(long)/sizeof(char)" schreiben, aber in der realität ist jeder Char auch genau 8 Bit. (Zumindest ANSI C sagt, dass ein char mindestens 8 bit haben muss)
Code: Alles auswählen
// p ist char*, l der long
for(i=0,p=(char*)&l ;i < sizeof(long) ; i++,p++) std::cout << *p << " ";
hallo,
hier mal mein programm
aber das funktioniert irgendwie überhaupt nicht
hier mal mein programm
Code: Alles auswählen
#include<iostream>
int main (void)
{
// p ist char*, l der long
char* p;
long l;
int i;
for(i=0,p=(char*)&l ;i < sizeof(long) ; i++,p++) std::cout << *p << " \n ";
return 0;
}
cu L@w
---
LINUX - because booting is for adding hardware!
---
LINUX - because booting is for adding hardware!
Ja, ich hatte den Typcast auf int beim *p vergessen. Hier mal das ganze Programm:Hoffe, das hilft dir, den Einstieg in C++ zu finden; weitere Aufgaben dieser Art solltest du jetzt lösen können.
Edit: Statt schreibt man neuerdings
BTW: Falls du an einer Uni bist, solltest du mal schauen, ob es bei euch das Skript "C++ für C-Programmierer" vom RRZN gibt. Das ist zwar schon etwas veraltet, ist aber eine recht gute Einführung
Code: Alles auswählen
#include<iostream>
using namespace std;
int main() /* funktion() ist in C++ identisch mit funktion(void) */
{
char* p;
long l=0x12345678L;
int i;
cout << showbase << hex;
cout << "Der Wert " << l << " liegt wie folgt im Speicher:";
for(i=0,p=(char*)&l ;i < sizeof(long) ; i++,p++) cout << (int)(*p) << " ";
cout << endl;
// "ABCD" erzeugt einen Null-terminierten String "ABCD" im Speicher
// und steht fr den Pointer auf den ersten Buchstaben
// Im Gegensatz zu C werden bei C++ für identische Strings neue
// erzeugt. (Nach a = "ABCD" und b="ABCD" zeigen a und b auf andere Adressen)
p = "ABCD";
cout << "Der String "<< p << " ist buchstabenweise:";
for( ; *p ; p++) cout << *p << " " ;
cout << endl;
return 0;
}
Edit: Statt
Code: Alles auswählen
(int)(*p)
Code: Alles auswählen
static_cast<int>(*p)