Sebastian Huber schrieb:
Jan Hendrik Berlin wrote: [...]
Es geht darum einem USB Chip einen Wert rüber zu schicken! Der muss halt long sein! Mit einem array jeglicher Art (die Art der Variablen muss halt ein Byte haben!) geht das halt wesentlich einfacher!
Wichtiger als Einfachheit ist Korrektheit. Wie der USB-Chip diesen long-Wert erwartet, ob byteweise binär und wenn ja in welcher Reihenfolge, steht in seiner Spezifikation, und genau so muss man das dann auch machen. Es nützt nichts, wenn man low endian schickt weil das einfacher ist, der Chip es aber high endian erwartet - dann funktioniert es eben nicht.
also ohne jetzt genauer drueber nachgedacht zu haben:
long v; write( fd, &v, sizeof( v));
sollte doch funktionieren, oder vielleicht das:
uint32_t v; for (int i = 0; i < 4; ++i) { bytewrite( static_cast
( &v) + i); }
Brr, nee, gerade wenn am anderen Ende ein Stück Hardware sitzt, sollte man die Bytes gezielt in der Reihenfolge senden, in der dieses sie erwartet, und nicht einfach so wie die eigene CPU-Architektur sie zufällig abgelegt hat. Genau das meinte ich mit: [Damit wird das Programm]
gerade erst portabel - wenn nämlich die Bytereihenfolge extern vorgegeben und unabhängig von der Maschinenarchitektur ist.
-- Tilman Schmidt t.schmidt@phoenixsoftware.de Phoenix Software GmbH Tel. +49 228 97199 0 Adolf-Hombitzer-Str. 12 Fax +49 228 97199 99 53227 Bonn, Germany http://www.phoenixsoftware.de