Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » int to Byte Array

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
14.08.2002, 12:01 Uhr
~Hoger Müller
Gast


Wie kann ich einen Int Wert in ein Byte Array schreiben??? Hoger
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
14.08.2002, 21:20 Uhr
virtual
Sexiest Bit alive
(Operator)



C++:
int ein_int = 4711;
char byte_array[sizeof(int)];

memcpy(byte_array, &ein_int, sizeof(int));


--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
17.08.2002, 02:57 Uhr
~Xoc
Gast



Code:
char byte_array[size];
*((int*)(byte_array + pos)) = 4711;



MfG
Xoc
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
17.08.2002, 09:01 Uhr
virtual
Sexiest Bit alive
(Operator)



Zitat:
~Xoc postete

Code:
char byte_array[size];
*((int*)(byte_array + pos)) = 4711;





Das hatte ich mir zwar auch kurz überlegt, aber leider geht das nicht: Manche Systeme erlauben diesen Zugriff byte_array+pos nicht, wenn byte_arry+pos eine ungrade oder nicht durch 4 teilbare Adresse ist.

Letztlich ist die Lösung - und das mag dich noch mehr wundern - eh nicht standardkonform: ein cast ist kein L-Value, darf also nicht links vom Gleichheitszeichen stehen (vgl. Abschnitt 6.5.4 des Standards).
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
17.08.2002, 11:18 Uhr
~Xoc
Gast


virtual postete

Zitat:
Das hatte ich mir zwar auch kurz überlegt, aber leider geht das nicht: Manche Systeme erlauben diesen Zugriff byte_array+pos nicht, wenn byte_arry+pos eine ungrade oder nicht durch 4 teilbare Adresse ist.

Letztlich ist die Lösung - und das mag dich noch mehr wundern - eh nicht standardkonform: ein cast ist kein L-Value, darf also nicht links vom Gleichheitszeichen stehen (vgl. Abschnitt 6.5.4 des Standards).[/i]


Ähm, ich weise dem Cast ja nix zu, sondern der Adresse, auf die das Cast zeigt. Damit ist es kein L-Value.

Mit dem durch 4 teilbar hast du Recht. Aber solange man auf X86gern arbeitet sollte das kein Problem sein.

MfG
Xoc
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
17.08.2002, 15:52 Uhr
virtual
Sexiest Bit alive
(Operator)



Zitat:
~Xoc postete

Ähm, ich weise dem Cast ja nix zu, sondern der Adresse, auf die das Cast zeigt. Damit ist es kein L-Value.
[i



Ich verstehe deine Argumentation nicht:

wenn es - wie du selbst sagst - kein L-Value ist - wie soll es dann auf der Linken seite der Zuweisung stehen dürfen??
auch das mit der Addresse: was meinst Du damit? - byte_array ist die Addresse eines char. Du castest es nach int*, womit es kein L-Value mehr ist und damit darf dem Teil nix mehr zugewiesen werden. Dass Du es vor der Zuweisung auch noch mit dem * dereferenzierst, macht die Sache auch nicht besser.
Die Tatsache, dass ich Dir auf Anhieb dei Architekturen nennen kann, wo so was nicht funktioniert (Motorola 68000, Alphaprozessoren [zumindest die ittige], die HP Prozessoren [habe Typnamen vergessen], ich glaube sogar Sun SPARC [bin mir nicht sicher]) lassen mir das Verhalten der 86er Intels eher als Ausnahme vorkommen.
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
17.08.2002, 16:15 Uhr
~Xoc
Gast



Zitat:
virtual postete
Ich verstehe deine Argumentation nicht:

wenn es - wie du selbst sagst - kein L-Value ist - wie soll es dann auf der Linken seite der Zuweisung stehen dürfen??
auch das mit der Addresse: was meinst Du damit? - byte_array ist die Addresse eines char. Du castest es nach int*, womit es kein L-Value mehr ist und damit darf dem Teil nix mehr zugewiesen werden. Dass Du es vor der Zuweisung auch noch mit dem * dereferenzierst, macht die Sache auch nicht besser.
[/i]


Hm, da befindest du dich im Irrtum.
Beispiel:


Code:
char s[10];
char *bla(){return s;}

int main(){
bla() = 'x'; // Verboten, weil bla() kein L-Value ist.
*bla() = 'x'; // Erlaubt, obwohl bla() kein L-Value ist, [b]weil es nicht als L-Value benutzt wird![/b]

s = 'x' // Verboten, weil s kein L-Value ist.
s[0] = 'x' // Erlaubt, obwohl s kein L-Value ist, [b]weil es nicht als L-Value benutzt wird![/b]

((int*)(byte_array + pos)) = 4711; // Verboten, weil ((int*)(byte_array + pos)) kein L-Value ist.
*((int*)(byte_array + pos)) = 4711; // Erlaubt, obwohl ((int*)(byte_array + pos)) kein L-Value ist, [b]weil es nicht als L-Value benutzt wird![/b]

((int*)(byte_array + pos)) = 4711; // Verboten, weil ((int*)(byte_array + pos)) kein L-Value ist.
((int*)(byte_array + pos))[0] = 4711; // Erlaubt, obwohl ((int*)(byte_array + pos)) kein L-Value ist, [b]weil es nicht als L-Value benutzt wird![/b]

}



Alle Klarheiten beseitigt?


Zitat:
virtual postete
Die Tatsache, dass ich Dir auf Anhieb dei Architekturen nennen kann, wo so was nicht funktioniert (Motorola 68000, Alphaprozessoren [zumindest die ittige], die HP Prozessoren [habe Typnamen vergessen], ich glaube sogar Sun SPARC [bin mir nicht sicher]) lassen mir das Verhalten der 86er Intels eher als
Ausnahme vorkommen.[/i]


Ich sagte doch schon, dass du mit den Architekturen Recht hast. Aber wer sowieso nur für den Intel schreibt, dem kann das egal sein.

Ach ja, man kann auch

*((int*)(byte_array)) = ...

schreiben. Wenn man 4 Byte Data Alignment aktiviert hat, führt das nie zu Problemen.

MfG
Xoc
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
17.08.2002, 16:25 Uhr
~Xoc
Gast


PS:
Es wäre ganz nett, wenn du die Passwort vergessen Funktion zum laufen bringen würdest. Der Link, den ich per Mail bekomme, schmeisst mich einfach wieder ins Forum.

MfG
Xoc
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
17.08.2002, 17:17 Uhr
virtual
Sexiest Bit alive
(Operator)


Korrekt - ich irrte. Es ist so, wie du sagst:

Ich kann nix an der "Passwordvergessen Funktion" Tun - das muß ein Admin machen. Ich schreibe Uwe eine Nachricht.
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
17.08.2002, 18:03 Uhr
Xoc



Das mit dem Passwort hat sich erledigt, das kam per Email an. Wäre aber trotzdem ganz hilfreich, wenn dieser generieren Link das auch sagen würde und einen nicht einfach ins Forum schmeisst (mit dem Menü links doppelt).

MfG
Xoc
 
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: