wie kann ich ein unsigned long int byteweise auf die serielle Schnittstelle ausgeben? Gruß Michael
Michael, warum postest du dieselbe Frage eigentlich mehrfach ? Wie man ein byte aus einem 4 byte long extrahiert ist dir doch schon lang und breit erklaert worden ? kopfschuettel
byte oder hex, warum spielt das so ne Rolle? Kannst du nicht auf Empfängerseite die Daten nach deinen Wünschen interpretieren?
wie man die bytes extrahiert ist mir nun auch klar. ich habe dann die hexzahlen z.B F4 A1 ... auf den seriellen Port geschickt. Das ist aber falsch, ich muß das byte senden und nicht einen string mit F4, ich weiß nicht wie ich es besser erklären soll sorry.
Folge mal Quadkommas link und schaue dir die erste Antwort von Jens an. Da stehts !
Long besteht aus Bytes, Bytes betehen aus Bits, Bits kann man schieben, links ist das hochwertige Bit, rechts das niederwertige Bit, von C habe ich keine Ahnung... ... (Dies soll keine Verarschung sein, sondern ein Denkanstoß...)
Ja dann sende sie halt ohne dass Du Dir mit sprintf eine String Repraesentierung generieren laesst. Ist alles im anderen Beitrag enthalten. zb. gleich die erste Antwort von Jens macht genau das: Den unsigned long in lauter Bytes zerpfluecken und jedes Byte auf die Reise bringen. Du musst dich nur noch mit dem Empfaenger absprechen in welcher Reihenfolge er die Bytes haben will.
Vielleicht reden wir aneinander vorbei : Ein byte hat einen Zahlenwert zwischen 0 und 255 oder 0x00 bis 0xFF. Wenn du von einem String sprichst dann schreib das bitte als 'ABCD' (also mit Hochkommas). Ein String enthaelt ein Zeichen pro byte. Jedes byte davon enthaelt den ASCII code des repraesentierten Zeichens, also 65 bzw. 0x41 fuer ein 'A'.
... oder besteht Dein Problem vielleicht darin, dass Du keine passende Send Funktion hast, die ein einzelnes unsigned char annimmt? Obwohl, kann ich mir eigentlich nicht vorstellen, dann eine Send Funktion zum verschicken eines kompletten Strings wuerde ja sinnvollerweise darauf aufbauen: void Send( const char* TheString ) { for( ; *TheString; TheString++ ) SendByte( *TheString ); }
so ist die Vorgabe vom Protocoll: [$8B] [$01] [$26]..... so hab ichs jetzt probiert: unsigned long value=4283036831; rprintfStr((unsigned char) (value >> 24)); rprintfStr((unsigned char) (value >> 16)); rprintfStr((unsigned char) (value >> 8)); rprintfStr((unsigned char) (value));
Ich kann mich taeuschen. Aber wenn derjenige der rprintfStr programmiert hat auch nur halbwegs mitgedacht hat, und dem Ding einen vernuenftigen Namen gegeben hat, dann ist rprintfStr die falsche Funktion. Du hast keinen String mehr, du hast einzelne Bytes! Das 'Str' im Namen von rprintfStr ist ein starkes Indiz, dass hier irgendwas mit Strings passiert. Das ist aber nicht das was Du willst. Du hast ein Byte und Du willst das dieses Byte auf die Leitung geht. So wie es ist. Ohne dass noch irgendwer daran rumfummelt.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.