Re: char array to long
Tilman Schmidt <[email protected]>
| Newsgroups | gmane.linux.suse.programming |
|---|---|
| Organization | Phoenix Software GmbH |
| Message-ID | <[email protected]> |
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<char*>( &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 [email protected]
Phoenix Software GmbH Tel. +49 228 97199 0
Adolf-Hombitzer-Str. 12 Fax +49 228 97199 99
53227 Bonn, Germany http://www.phoenixsoftware.de
--
Um die Liste abzubestellen, schicken Sie eine Mail an:
[email protected]
Um eine Liste aller verfügbaren Kommandos zu bekommen, schicken
Sie eine Mail an: [email protected]