EirikO Skrevet 11. juli 2007 Del Skrevet 11. juli 2007 (endret) Ø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? Endret 11. juli 2007 av EirikO Lenke til kommentar
alfred97 Skrevet 11. juli 2007 Del Skrevet 11. juli 2007 noe sånt som dette? eller misforstår jeg spørsmålet? disp myStruct; myStruct.alfa = 0x10; // or whatever myStruct.dp = ... etc. unsigned char *message = (unsigned char *)&myStruct; Lenke til kommentar
EirikO Skrevet 11. juli 2007 Forfatter Del Skrevet 11. juli 2007 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
alfred97 Skrevet 11. juli 2007 Del Skrevet 11. juli 2007 (endret) 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 11. juli 2007 av alfred97 Lenke til kommentar
EirikO Skrevet 11. juli 2007 Forfatter Del Skrevet 11. juli 2007 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...) Lenke til kommentar
alfred97 Skrevet 11. juli 2007 Del Skrevet 11. juli 2007 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
EirikO Skrevet 11. juli 2007 Forfatter Del Skrevet 11. juli 2007 (endret) 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 11. juli 2007 av EirikO Lenke til kommentar
GeirGrusom Skrevet 11. juli 2007 Del Skrevet 11. juli 2007 Dette blir feil, hvis du caster til en char * vil ikke alle verdiene automatisk bli konvertert på et magisk vis, du må bruke sprintf e.l. Lenke til kommentar
alfred97 Skrevet 11. juli 2007 Del Skrevet 11. juli 2007 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
Anbefalte innlegg
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 kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå