hvordan du konverterer 4bytes i 4 separate bytes

E

engr.hayee

Guest
Hei,
Jeg har ønske en 4byte data.i å bryte denne 4byte data til 4 (1byte) data og lagre den i fire variables.how kan jeg gjøre det i C.
Takk

 
Hei,

Kan du fortelle meg hvilken mikrokontroller du bruker?

Btw, kan du bruke maske 000F, 00F0 deretter en omlegging av 8, 0F00 med et skift med 16 og F000 med skift med 24 byte.

 
Hei,
Jeg bruker pic16f877a og CCS c kompilator (4,020).

 
Som AdvaRes allerede har fortalt, kan du bruke byte skiftende

Code:typedef char OneByteData;Data1 OneByteData, Data2, data3, data4;

Data1 = FourByteData & 0x000F;

Data2 = (FourByteData>> 8) & 0x000F;

data3 = (FourByteData>> 16) & 0x000F;

data4 = (FourByteData>> 24) & 0x000F;

 
...eller, hvis du bruker 8-bits byte i stedet for 4-bits

<img src="http://www.edaboard.com/images/smiles/icon_wink.gif" alt="Wink" border="0" />

:
Code:typedef unsigned char OneByteData;Data1 OneByteData, Data2, data3, data4;

Data1 = FourByteData & 0xFF;

Data2 = (FourByteData>> 8) & 0xFF;

data3 = (FourByteData>> 16) & 0xFF;

data4 = (FourByteData>> 24) & 0xFF;

 
Høyre

<img src="http://www.edaboard.com/images/smiles/icon_smile.gif" alt="Smil" border="0" />
 
Dette fungerer:

Code:

# include <conio.h>

# include <stdio.h>

# include <stdlib.h>int main (void)

(

int a = 0x45abcdef, i;

char b [] = (3, 4, 5, 6);

char * p;p = (char *) &a; / / typecast 32 biters heltall adresse til en char peker

for (i = 0; i <= 3; i )

(

b = p ;

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

getch ();

return 0;

)

 
hei,

u kan også bruke UNION strukturen i standard C-språk.u vil få det veldig enkelt.bare studie om UNION fra en standard C lærebokDette er den klassiske situasjonen der UNION er det i standard C-språk ..............arnab/vu2bpw

 
Hei

Her er en fagforening eksempel:

1) Declare en fagforening

union (unsigned long MyNumber; / / Long er 4 byte lengdeunsigned char Byte [4];) ByteConvert; / / kan gjøres i H-filen2) oppretter en forekomst i RAM

ByteConvert Test; / / Bare i den. C fil
3) Bruk fagforeningen å konvertere lenge til 4 byteTest.MyNumber = 1234;/ / access unsigned char via fagforeningenTest.Byte [0] / / vil holde nummer 4;Test.Byte [1] / / vil holde nummer 3;Test.Byte [2] / / vil holde nummer 2;Test.Byte [3] / / vil holde nummer 1;
 
hei bobcat,u gav eksempel ---------------Test.MyNumber = 1234;
/ / access unsigned char via fagforeningen
Test.Byte [0] / / vil holde nummer 4;
Test.Byte [1] / / vil holde nummer 3;
Test.Byte [2] / / vil holde nummer 2;
Test.Byte [3] / / vil holde nummer 1;
jeg dont overveie denne er riktig, rettferdig sjekk den vennligst ....................................... .Union holder byte verdier, men for int 1234 wont det bryte den til 1,2,3,4 heller vi vil få den første byte, andre, tredje og frem byte int verdi 1234 i byte kloke ..... ........................arnab/vu2bpw

 
del: D
Sist endret av VSMVDD den 09. Aug 2008 8:32, endret 3 ganger totalt

 
Hei Arnab

Ja.du har rett

Det var en misteak det bør være som du sier

Test.Byte [0] / / vil holde den første bye;
Test.Byte [1] / / holder 2. bye;;
Test.Byte [2] / / holder 3. bye;;
Test.Byte [3] / / vil holde den 4. bye;;

Takk

Bobi

 
4bytes = HELTALL 0xFFFFFFFF som max
functCode:header ..
main.h

# include <math.h>INT indata; / / integer for å holde en 32bit verdi titt på kompilatoren for å se hvordan du definerer 32bit vals

BYTE outdata [4]; / matrise med verdier tildelt av konvertere funksjon

BYTE convertedbyte; / / konverteres spot byte verdi ...

INT t; / / intervall 0-3 eller noe sånt ....

BOOL feil; / / feil bit

////////////////////////////////

/ / Case Logic DEFINISJONER: / /

////////////////////////////////

# saken

# ifndef TRUE

# define TRUE 1

# endif

# ifndef FALSE

# define FALSE 0

# endif

# ifndef JA

# define Ja 1

# endif

# ifndef NO

# define NO 0

# endif

# ifndef HIGH

# define HIGH 1

# endif

# ifndef LOW

# define LOW 0

# endif

# ifndef ON

# define ON 1

# endif

# ifndef OFF

# define Av 0

# endif

# ifndef UP

# define opp 1

# endif

# ifndef DOWN

# define DOWN 0

# endif

# ifndef UCHAR

# define UCHAR char

# endif

# ifndef UINT

# define UINT lenge

# endif

# ifndef BIT

# define BIT kort

# endif

# ifndef Schär

# define Schär signert int

# endif

# ifndef SINT

# define SINT signert lenge

# endif

# ifndef FLOAT

# define FLOAT float

# endif

/////////////////////////////////

/////////////////////////////////
convertclass.cppinkludere main.h

t, indata = 0;

outdata [0] = outdata [1] = outdata [2] = outdata [3] = 0x00;konvertere (BYTE * outdata [], int indata)

(

* outdata [0] = (byte) indata;

* outdata [1] = (byte) (indata <<8);

* outdata [2] = (byte) (indata <<16);

* outdata [3] = (byte) (indata <<24);

return (TRUE);

)
 

Welcome to EDABoard.com

Sponsor

Back
Top