Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » memcpy oder Alternative?

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 <
000
15.12.2007, 15:28 Uhr
max power



Hallo,

ich habe ein Array vom Typ unsigned char. Ich möchte folgende Struktur anlegen:

1. Byte | 2. Byte | 3. Byte | 4.Byte | .....
<Wert1><-----Wert 2-----><Wert3><.....

Also soll es Felder geben in denen 8Bit Werte stehen, aber auch Felder in denen 16Bit Werte stehen. Ich wollte die 16Bit Werte per memcpy() in das Array kopieren.


C++:
void StwMeld(uchar *data, uint8 Wert1, uint16 Wert2) {
     data[0] = Wert1;
     memcpy(data[1],Wert2,sizeof(uint16));
}



In diesem Beispiel erwarte ich, dass nun in data[1] und data[2] der Wert "Wert2" steht. Mein Kompiler liefert aber folgenden Fehler: "invalid conversion from `unsigned char' to `void*' "

Danke für eure Hilfe
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
15.12.2007, 15:54 Uhr
Pablo
Supertux
(Operator)


ist klar, weil data[1] ein uchar und kein char* mehr ist. Mit data[1] bekommst du das Byte an der Stelle 1 zurück, nicht dessen Adresse


C++:
void StwMeld(uchar *data, uint8 Wert1, uint16 Wert2) {
     data[0] = Wert1;
     memcpy(data + 1,Wert2,sizeof(uint16));
}



Ich würde aber auf die Endianess des Systems aufpassen, darauf muss man achten, wenn du auf andere Plattformen dein Zeug portierst.
--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!

Dieser Post wurde am 15.12.2007 um 15:56 Uhr von Pablo editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
15.12.2007, 17:05 Uhr
max power



Hallo,
danke für die Hilfe. Der Fehler ist erkannt. Jetzt habe ich noch eine Frage zu der Byte-Reihenfolge "Endianness". Für den Wert "300" ergibt sich als Hex-Wert "12C". Wenn ich die Array-Felder nun Ausgebe ist die Notation nun genau vertauscht.

C++:
printf("%X,",data[1]);
printf("%X,",data[2]);


Also als Ausgabe: "2C,1"
Meine Frage: Sollte ich die Reihenfolge der Bytes vertauschen (gibt es eine Funktion?) oder ist das nur ein Problem meiner Ausgabe.

danke
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
15.12.2007, 17:51 Uhr
0xdeadbeef
Gott
(Operator)



C++:
data[1] = (Wert2 >> 8) & 0xff;
data[2] = Wert2 & 0xff;


--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
15.12.2007, 18:24 Uhr
max power



hey,
hat mir sehr geholfen die Bits zu verschieben. Verstehe noch nicht was "0xFF" bedeutet. Unter welchem Stichwort kann ich mich darüber schlau lesen?

Danke
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
15.12.2007, 18:38 Uhr
Pablo
Supertux
(Operator)


0xFF ist der Hexadezimal Wert für 255. Wert2 >> 8 shiftet 8 Bits nach Rechts. Mit der Maske 0xFF kann man die neuen oberen 8 Bits auf 0 setzen.
--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
15.12.2007, 18:38 Uhr
0xdeadbeef
Gott
(Operator)


Das ist ne Hexadezimalzahl, 0xff = 255. In diesem Fall benutze ich das, weil es in Binärdarstellung 11111111 ist, und ich die Bits zur binären Verundung gebrauchen kann.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
15.12.2007, 19:04 Uhr
max power



Danke für Eure Hilfe!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ 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: