mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik int-Wert in char-Wert packen


Autor: Bernd Schuster (mms)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

wie kann ich jeweils zwei Stellen des Int-Wertes in genau einer Stelle 
des char Arrays packen?
unsigned int test = 0x00112233; 

char array[8]; 

/*
array[0] = 0x00
array[1] = 0x11
array[2] = 0x22
array[3] = 0x33
*/


Gruß
Bernd

Autor: Ahem (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Was hast Du denn schon versucht?

Autor: Andi ... (xaos)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hats nen speziellen grund wozu ? wenn du das damit zur übertragung 
splitten willst ists der falsche weg....

Autor: Mark Brandis (markbrandis)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Zum Beispiel so:
#include <stdio.h>

int main()
{
  unsigned int test = 0x00112233; 
  char array[8]; 

  array[0] = test >> 24;
  array[1] = test >> 16;
  array[2] = test >>  8;
  array[3] = test >>  0;

  printf("array[0] = %x\n", array[0]);
  printf("array[1] = %x\n", array[1]);
  printf("array[2] = %x\n", array[2]);
  printf("array[3] = %x\n", array[3]);

  return 0;
}


Autor: Bernd Schuster (mms)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>hats nen speziellen grund wozu ?

ja, der Int-Wert stellt eine IP-Adresse dar und soll in einem Char-Array 
paltziert werden für den HTTP Header Host - bei diesem wird diese 
Adresse vom Client angegeben - allerdings nur mit einem Wert pro Wert 
der IP.

Bernd

Autor: Mark Brandis (markbrandis)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wobei ich gerade sehe, dass meine Implementierung nicht besonders toll 
ist - so wird zum Beispiel aus 0x98765432 hinterher
ffffff98
76
54
32

Aber das war halt auch in einer Minute schnell zusammengehackt ;-)

Autor: Robert Weber (rweber)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mark Brandis schrieb:
> Wobei ich gerade sehe, dass meine Implementierung nicht besonders toll
> ist - so wird zum Beispiel aus 0x98765432 hinterher

Kommt drauf an. Wenn dein "unsigned int" mind. 4 Bytes gross ist dann 
stimmts. Ansonsten sollte ein "unsigned long" genuegen.

Gruss,
rweber

Autor: Mark Brandis (markbrandis)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
So passt's:
  unsigned int test = 0x98765432; 
  unsigned char array[8];

Autor: Robert Weber (rweber)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mark Brandis schrieb:
> So passt's:
>
>
>   unsigned int test = 0x98765432;
>   unsigned char array[8];
> 

Wo soll denn da bitte der Unterschied sein? Wenn dein Int nur 2 Bytes 
gross ist, wird es durch die Zuweisung eines anderen Wertes auch nicht 
besser.

Autor: Uhu Uhuhu (uhu)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wie wärs denn damit:
union {
   unsigned int u;
   unsigned char array[4];
} test;

test.u = 0x98765432;

Vorausgesetzt natürlich, es gilt sizeof (unsigned int) == 4

Autor: Mark Brandis (markbrandis)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Robert Weber schrieb:
> Wo soll denn da bitte der Unterschied sein? Wenn dein Int nur 2 Bytes
> gross ist, wird es durch die Zuweisung eines anderen Wertes auch nicht
> besser.

Ist 4 Byte groß. AMD x86 32-Bit-Prozessor, Windows XP, gcc / MinGW

Würde auch nicht viel Sinn machen, einer 16-Bit-Variablen den Wert 
0x98765432 zuweisen zu wollen. Oder anders gesagt, eine IP-Adresse hat 
mehr als 16 Bits. Und kein Vorzeichen. :-)

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Vorausgesetzt natürlich, es gilt sizeof (unsigned int) == 4
Und die Endianess (Little oder Big) der Zielarchitektur passt.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.