Forum: Mikrocontroller und Digitale Elektronik Messwerte als unsigned char


von E. G. (grasshuepf)


Lesenswert?

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?
von Jim M. (turboj)


Lesenswert?

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];
von C-Basics (Gast)


Lesenswert?

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
von Oliver (Gast)


Lesenswert?

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.
von E. G. (grasshuepf)


Lesenswert?

vielen dank an alle!
die stichworte Pointer, Arrac, Char, Integer haben ausgereicht ...

pseudocode:
*(chararray + x) = intwert;
von Dosmo (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.