String to Struktur konvertieren
-
Hello Leutz!
Ich hät einmal eine Frage: Wie kann man einen String zu einer Struktur konvertieren? Gibts hier schon eine vorgefertigte Funktion oder muss man die selbst schreiben?Bitte um Hilfe.
mfg
-
was steht denn in dem string? vielleicht rohe binaerdaten? in dem fall ginge es so:
struct bar { unsigned long baz; }; unsigned char foo[4] = {131, 76, 19, 1}; // wird ein int printf("%d", ((bar*)foo)->baz); // sollte 18041987 ausgeben, oder 2202800897 auf big endian
aus dem handgelenk und fuer little endian maschinen (x86).
funktioniert so: foo benutze ich als pointer auf die 4 unsigned chars. das wird zum pointer auf eine struktur gecastet und dann normal weiterverwendet. ich haette auch schreiben koennen:
((bar*)foo).baz*
die -> schreibweise ist bequemer fuer pointer auf structs (bei verlinkten listen sehr oft gesehen).
-
Es soll ein Zeitstring zu einer Zeitstruktur convertiert werden.
Dann sollen mit try und catch Fehlermeldungen ausgegeben werden. Das mit try und catch bekomm ich ja hin, aber das erste nicht.
mfg
-
try und catch gibts in ansi c nicht.
wie sehen "zeitstring" und "zeitstruktur" aus?konvertieren bedeutet in deinem fall nicht casten, also vergiss mein beispiel besser erstmal.
-
Also unser Lehrer macht halt C und C++ in einem, a bissal durcheinander. Sorry. Es soll wahrscheinlich eine Zeit eingelesen werden als String und dann als Zeitstruktur wieder hervorkommen. Keine Ahnung wie das gehen soll.
-
bevor du nicht weisst, was du als eingabe erwarten kannst, kannst du auch nicht weiter programmieren.
so ist das leben.ohne eine beispieleingabe kann dir hier keiner helfen.
-
Zeitstruktur wäre ein struct tm (Header <time.h>) oder etwas eigenes? Wenn du weißt, in welcher Reihenfolge die einzelnen Elemente im String auftauchen sollen, kannst du dafür sscanf verwenden:
struct dtime { int day,month,year; int hour,min,sec; } struct dtime time_st; char* time_string = "5.12.2005 8:32:17"; sscanf(time_string,"%d.%d.%d %d:%d:%d",time_st.day, time_st.month, time_st.year, time_st.hour, time_st.min, time_st.sec);