Hallo, ich möchte über ein Funkkanal messwerte übertragen. Durch die API sind nur arrays mit unsigned char versendbar. Allerdings liegen meine Daten als Integer vor. der Mikrokontroller ist der MSP430BT5190. Ich komme da nicht weiter. Ich würde gerne mein int Array in Hexdezimal umwandeln, nur weiß ich nicht wie. Dierekt das array als Hex z erzeugen ist blöde. Hat jemand ein tip?
Wieso hex? Ein 16 Bit Wert lässt sich doch einfach nach 2 mal 8 Bit aufteilen:
1 | uint8_t data[Anzahl]; |
2 | uint16_t Wert; |
3 | |
4 | // Ausgabe
|
5 | data[0]=Wert &0xFF; |
6 | data[1]=Wert >> 8; |
7 | |
8 | // Empfang
|
9 | Wert = (data[1]<<8) | data[0]; |
Um die Schieberei zu vermeiden, könnte man eine union verwenden, so dass das integer array und ein unsigned char array auf identischen Speicherstellen liegen
Ein Array aus chars wird doch sowieso als Pointer übergeben. Da steht doch als weiterer Parameter bestimmt noch die Anzahl der zu übertragenden Bytes, oder? Dann einfach einen Pointer auf deinen int übergeben und die Größe des ints in Byte. Natürlich casten, um Compiler-Warnungen zu vermeiden. Fertig ist die Laube.
vielen dank an alle! die stichworte Pointer, Arrac, Char, Integer haben ausgereicht ... pseudocode: *(chararray + x) = intwert;
Da mußt Du aufpassen, daß Dein Pointer immer gerade Adressen enthält. Wenn man beim MSP versucht, ein 16-Bit-Wert (oder größer) auf eine ungerade Adresse zu schreiben, gibt's einen Adress-Error-Trap. Besser das int als zwei char reinschreiben und dabei Little/Big Endian berücksichtigen.
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.