Forum: PC-Programmierung Unsigned Long zu (nach) int


von Noob (Gast)


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.

von Thomas (Gast)


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

von DirkB (Gast)


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?

von Noob (Gast)


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ß

von DirkB (Gast)


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.

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.