Gå til innhold

Sette sammen datatyper


Anbefalte innlegg

Ønsker å sette sammen flere forskjellige datatyper fra en struct slik at de blir en unsigned char..

 

Structen ser slik ut:

typedef struct disp{
unsigned char alfa;
unsigned int dp;
char streng[5];
unsigned char blink;
}disp;

 

 

Jeg vil gjerne ha dette ut i en void *message hvor alt bare ligger etterhverandre. Muligens med et skilletegn mellom hver del. Er dette mulig på noen nogenlunde forluftig måte?

:roll:

Endret av EirikO
Lenke til kommentar
Videoannonse
Annonse

hmm.. Vil da message inneholde noe sånt som a5heiob?

 

alfa = a

dp = 5

streng[5] heiho

blink = b

 

??

 

Er i alle fall det jeg ønsker å oppnå. Skal nemlig sende structen gjennom en serieport.. og vil ha tilgang til alle data på andre siden...

Lenke til kommentar

Jepp! I en struct vil datamedlemmene ligge rett etter hverandre, så om du caster den til et array av bytes (unsigned char), så kan du sende hele suppa over en socket eller en seriellport eller whatever. :)

 

Skal du motta en slik struct, så kan du bare caste motsatt vei:

unsigned char *buffer; 
// sett inn kode her som allokerer minneplass til bufferet, og fyller det

disp *myStruct = (disp *)buffer;
// nå kan datamedlemmene hentes ut med myStruct->alfa, myStruct->dp osv.

 

Hvis vi bruker verdiene fra eksemplet ditt, så vil bufferet inneholde "a5heihob" som du sa. MEN! det er ikke dette du vil få ut hvis du prøver å skrive det ut direkte som en streng. Dette fordi medlemmet dp er en int, ikke en char. :)

Endret av alfred97
Lenke til kommentar

hmm.. stilig.

Går det an å gjette hvordan det vil se ut hvis man skriver det ut rett i hyperterminal?

Får ikke noe fornuftig nå, men det er kanskje rett....?

 

(C-koden kjører på et kretskort som har serieport.. Denne har jeg koblet rett i pc'en og hyperterminal...) :hmm:

Lenke til kommentar

Nja, litt av problemet ligger vel i at en int strekker seg over 4 bytes, det vil si at den tar like mye plass som 4 chars. Når verdien er 5, så vil 3 av de 4 bytene være lik 0, altså den characteren som vanligvis terminerer en streng. :)

Lenke til kommentar

oki.. Jeg får prøve meg litt frem.. Structen inneholder ikke det jeg oppga i eksempelet. Er ikke helt sikker på verdiene, faktisk... (Andres kode jeg skal fikse på og utvide...)

 

Men jeg får ut et gresk phi-tegn og en s.. Så det er da noe.

 

Takk for hjelpen, uansett.

Endret av EirikO
Lenke til kommentar

I forbindelse med direkte utskrift av char-bufferet blir det feil, ja... men det konstaterte jeg allerede til å begynne med.

Like fullt kan man fortsatt caste til et char-array og tilbake til en struct igjen uten å konvertere noe som helst. :)

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...