Unsigned Long zu (nach) int

Gast #2214800
Lesenswert?

Hallo,

ich habe als Ergebnis einer Berechnung eine ziemlich große Zahl.

z.B.
1
unsigned long long_variable=1234567890;

ich soll jetzt die Zahl in ein Array schreiben und als HEX Wert 
übertragen.
1
int tx_array[50];

nun, weiss momentan nicht wie ich das angehn soll. Auch die 
Zusammensetzung am Empfänger...

Wäre für Tipps dankbar.
Gast #2214844
Lesenswert?

Hey,

also wenn du dein Long-Wert übertragen willst, gehe ich mal davon aus, 
dass du diesen Long-Wert Byte für Byte überträgst. Angenommen, dein Long 
Wert besteht aus 4 Byte.

Im Prinzip musst du dann aus dem Long-Wert 4 einzelne Byte-Werte machen. 
Und als Byte nimmt man in C in der Regel den Typ char - oder besser, 
unsigned char.

Also würde es sich anbieten, dein tx_array als unsigned char zu 
deklarieren:

unsigned char tx_array[4];

Wie du deinen long-Wert nun in das Array bekommst, musst du dir 
überlegen. Man könnte dies z.B. mit der C-Funktion memcpy(..) 
durchführen:

unsigned long lngValue;
unsigned char tx_array[4];

lngValue = 1234567890;
//kopiere die 4 Byte vom Long-Wert in das uns. char array
memcpy(tx_array, &lngValue, 4);
//sende die einzelnen Bytes tx_array[0]..ty_array[3]

Viele Grüße,
  Thomas
Gast #2215039
Lesenswert?

Ein
1
sprintf(arrayname, "%lx", long_variable)
 macht das schon

Aaaaaber, Daten werden meist Zeichenweise übertragen.
Dein tx_array ist aber aus int gemacht.

Bist du dir sicher, dass das Hexwerte sein müssen?
Oder sind die Hexwerte nur da, damit Du das besser lesen kannst?
Gast #2216589
Lesenswert?

Hallo, danke für die Tipps,

es mussen HEX Werte sein, da ich das Programm nach speziellen 
Anforderungen aufbauen muss. Ich kann immer nur byteweise übertragen, 
d.h. 0xXX, 0xXX...

Ich dachte eventuell zuerst die Zahl ins HEX konvertieren und danach in 
2 bytes aufteilen, nur die Konvertierung zu _HEX is net so einfach, 
"sprintf" steht mir nicht zu Verfügung.

Gruß
Gast #2216917
Lesenswert?

In vielen Datenblättern stehen die Parameter als Hexwerte, damit der 
Mensch (Du) das besser verstehen kann. Z.B. 0x41 statt 'A'. Übertragen 
wird aber nur 'A' (1 Byte, kein 'x' '0' ....).

Schau mal in deiner Doku/Library nach ab es nicht ein itoa() mit Angabe 
der Zahlenbasis gibt. Oder eine andere Funktion die das macht.

Ansonsten ist das Umwandeln in einen Hex-String auch kein Hexenwerk.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren