Int in Array zerlegen

Gast #2398498
Lesenswert?
• ▲
▼
Moin Moin,
ich versuche gerade ein Integer in zwei Bytes zu zerlegen.. aber 
irgendwie funktioniert das nur mit Zahlen kleiner 255. Warum ist das so, 
und gibt es dafür eine Lösung?

1
typedef union MyVal{
2
unsigned int valInt;
3
unsigned char buffVal[CAN_DATA_LENGTH];
4

5
}GetMyVal;
6

7
GetMyVal SetMyVal;
8

9
unsigned int Value=260;
10
unsigned char Buff[2];
11

12

13
SetMyVal.valInt=Value;
14

15
Buff[0]=SetVal.buffVal[0];
16
Buff[1]=SetVal.buffVal[1];

Viele Grüße
Gast #2398510
Lesenswert?
• ▲
▼
Was ist CAN_DATA_LENGTH? 2?

Das Problem kommt alle drei Tage hier im Forum. Ich meine der Standard 
sagt man darf nur das lesen was zuletzt geschrieben wurde. Wenn du denn 
GCC nimmst versuchs mal mit attribute((_packed_)).
Gast #2398549
Lesenswert?
• ▲
▼
Hier der Code ausm GCC:
1
union attribute((__packed__)) MyVal{
2
unsigned int valInt;
3
unsigned char buffVal[2];
4

5
};
6

7
union MyVal SetMyVal;
8

9
unsigned int Value=260;
10
unsigned char Buff[2];
11

12

13
SetMyVal.valInt=Value;
14

15
Buff[0]=SetVal.buffVal[0];
16
Buff[1]=SetVal.buffVal[1];
Gast #2398701
Lesenswert?
• ▲
▼
unions sind für sowas überhaupt nicht gedacht. Dazu kommt, daß int 32 
Bit breit ist und nicht 16. Gehen müßte es aber trotzdem. Bei mir kommt 
wie erwartet für Buf[0] 4 raus und für Buf[1] 1.

Praktikant schrieb:
> Da kommt immer das gleiche heraus, egal auf welche Art ich das mache.

Was kommt denn raus?

> Habe es gerade noch mit memcpy versucht.. same shit. -.-

Kannst du mal ein kurzes, aber komplettes Programm zeigen, wo du das 
Problem hast?

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