Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » char[4] zu int

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 < [ 2 ]
000
25.07.2004, 16:07 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


hoi gibts für sowas irgend nen hardcorecast oder trick wie ich aus nem char[4] nen int mache?

also bisher hab ichs so

C++:
//xwidth ist ein int* und bmph.format_header.picture_width  ein char[4]
*x_width =    bmph.format_header.picture_width[3]<<24|
        bmph.format_header.picture_width[2]<<16|
        bmph.format_header.picture_width[1]<<8|
        bmph.format_header.picture_width[0];



funzt auch aber kann man das auch einfach haben weil der scheiss liegt ja direkt hintereinander im speicher...
--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
25.07.2004, 16:11 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


verdammt kaum hab ich mich entschlossen doch zu fragen hab ichs auch schon selber hinbekommen


C++:
*x_width =    *((int*)(bmph.format_header.picture_width));



hab vorher erst versucht nach void zu casten...

was für gefahren birgt der krempel eigentlich den ich da mache und was ist wann vorzuziehen?
--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
25.07.2004, 20:19 Uhr
(un)wissender
Niveauwart


Durch die Endiantypen bekommst du Ärger, anhängig davon wierum die Sachen in char[] stehen.
--
Wer früher stirbt ist länger tot.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
25.07.2004, 21:15 Uhr
Hans
Library Walker
(Operator)


Hi Windalf,

wenn Du da schon auf Bitebene herum turnst, dann doch mal sowas:

C++:
union
{ int *xwidth;
   char pic_width[4];
} bmp_width;



könnte zwar umständnlich werden, weil Du da schon mit Strukturdaten zu tun hast, aber der Vorteil, oder meiner Ansicht nach der Sinn einer union ist ja gerade der, das man deren Elemente als unterschiedliche Daten interpretieren kann.

Ein Beispiel zum umgang mit unions findest Du, wenn Du mal die Suchfunktion bemühst, oder auch mal das Archiv vom alten C++ Forum (Parsimony) durchsuchst. Da müsstest Du ein Programm finden, das mit Hilfe einer union aus einer Reihe von Float-Zahlen einen Text baut, indem erst eine Zahl als float in die union gelesen wird, und anschliessend die einzelnen Bytes als char wieder ausgegeben werden.

Bezüglich der Endian-geschichte, die (un)wissender angesprochen hat, sollte es dann ja auch kein Problem mehr sein, die Bytefolge entsprechend zu verdrehen.

Hans
--
Man muss nicht alles wissen, aber man sollte wissen, wo es steht. Zum Beispiel hier: Nachdenkseiten oder Infoportal Globalisierung.

Dieser Post wurde am 25.07.2004 um 21:18 Uhr von Hans editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
25.07.2004, 22:47 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


@hans
hm unions sind ne gute idee da bin ich gar nicht drauf gekommen, allerdings tut im moment so wie ich will werd also erstmal nicht weiter dran drehen es sei denn es funzt doch irgendwas nicht...

ach so und kann mir das endian wirklich probleme machen, das wird aus ner datei mit fread eingelesen... wenn der das msb auf der anderen seite hat liest der doch auch umgekehrt ein oder?
--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
25.07.2004, 23:18 Uhr
(un)wissender
Niveauwart


Das sollte so sein, ja.

Trotzdem sollte man die Endianproblematik nicht unterschätzen, du kannst ja schnell schauen, welcher Endiantyp das ist (hatten wir glaube ich schon mal als Rätsel, irgendwas mit sex (der virtual halt)) und dann ggf. darauf reagieren. Schick gekappselt kannste das dann für immer vergessen.
--
Wer früher stirbt ist länger tot.

Dieser Post wurde am 25.07.2004 um 23:20 Uhr von (un)wissender editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
25.07.2004, 23:30 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


@(un)wissender
die scheisse bei der sache ist das ich das nicht testen kann. und ich bin nicht so ein freund der völlig abstrakten programmierung da raucht immer die birne so
Ich schick lieber öfter mal mein proggie ins verderben und wenns stirbt probier ich halt statt der plus 1 ne minus 1 oder so.... das spart meist nerven und geht schneller.... Erst wenn ich mit der methode nicht mehr weiterkomme probier ich was anderes...
--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
26.07.2004, 09:00 Uhr
(un)wissender
Niveauwart


. Tut was immer dich glücklich macht!
--
Wer früher stirbt ist länger tot.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
26.07.2004, 10:17 Uhr
ao

(Operator)



Zitat:
ach so und kann mir das endian wirklich probleme machen, das wird aus ner datei mit fread eingelesen... wenn der das msb auf der anderen seite hat liest der doch auch umgekehrt ein oder?


Nein, wenn die Daten low-byte-first weggeschrieben wurden, werden sie auch so zurückgeholt. Wenn bei dir Rechner mit unterschiedlicher Endianness im Spiel sind (z.B. Intel x86 und Motorola PowerPC), musst du das Endianness-Problem lösen.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
26.07.2004, 20:09 Uhr
Hans
Library Walker
(Operator)


Hi Windalf,

wie Deinen Variablennamen zu entnehmen ist, bastelst Du da ja anscheinend ein Programm, das BMP-Dateien verarbeiten soll. Soweit ich informiert bin, sollte doch in der Formatbeschreibung drin stehen, wie die Daten im Dateiheader drin stehen müssen. Ich meine zumindest, beim GIF-Format mal gelesen zu haben, das da das Motorola Big-Endian-Format vorgeschrieben ist.
Genauere Informationen bei Wotsit.org.

Hans
--
Man muss nicht alles wissen, aber man sollte wissen, wo es steht. Zum Beispiel hier: Nachdenkseiten oder Infoportal Globalisierung.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 < [ 2 ]     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: