Builder.cz - Informacni server o programovani

Odběr fotomagazínu

Fotografický magazín "iZIN IDIF" každý týden ve Vašem e-mailu.
Co nového ve světě fotografie!

 

Zadejte Vaši e-mailovou adresu:

Kamarád fotí rád?

Přihlas ho k odběru fotomagazínu!

 

Zadejte e-mailovou adresu kamaráda:

Soutěž

Sponzorem soutěže je:

IDIF

 

Kdo je autorem výstavy obrazových fotografií „Očima Hanse Christiana Andersena“?

V dnešní soutěži hrajeme o:



Problém s endianitou

Seznam témat     Nová odpověď

Přihlásit se     Registrace     Zapomenuté heslo

Re: Problém s endianitou

Autor: TC1 ♀

13:51:46 10.06.2014

/*
Ahoj,

mám následující problém: Mám zarovnanou strukturu a potřebuji jí převést na pole bytů.
Problém je, že se hodnoty do pole ukládají ve formátu little endian a já bych potřeboval,
aby se ukládali ve formátu big endian. Nevíte jak to vyřešit?
*/
typedef struct
{
int a;
short int b;
uint8_t c;
uint8_t d;
void Endianize(uint8_t *buf)
{
uint8_t *src=(uint8_t *)this;
int pos=swap(src, buf, sizeof(int));
pos+=swap(src+pos, buf+pos, sizeof(short int));
pos+=swap(src+pos, buf+pos, sizeof(uint8_t));
pos+=swap(src+pos, buf+pos, sizeof(uint8_t));
}
int swap(uint8_t *src,uint8_t *trg, int n)
{
int i;
for(i=0;i<n;i++)trg[i]=src[n-i-1];
return n;
}

} mystruct;


void main()
{
int i;
uint8_t * test;
mystruct *str, s;
str = &s;

str->a = 0xFFEEDDCC;
str->b = 1;
str->c = 2;
str->d = 3;

test = (uint8_t *)&s;
for(i = 0; i < sizeof(mystruct); i++)
{
printf(" %02X \n\r", test[i]);
}
uint8_t *res=new uint8_t[sizeof(mystruct)];
s.Endianize(res);
printf("=====================\r\n");
for(i = 0; i < sizeof(mystruct); i++)
{
printf(" %02X \n\r", res[i]);
}
}

Citovat příspěvek

 

Problém s endianitou

Autor: Libor1234 ♂

11:46:48 09.06.2014

Ahoj,

mám následující problém: Mám zarovnanou strukturu a potřebuji jí převést na pole bytů. Problém je, že se hodnoty do pole ukládají ve formátu little endian a já bych potřeboval, aby se ukládali ve formátu big endian. Nevíte jak to vyřešit?

typedef struct
{
int a;
short int b;
uint8_t c;
uint8_t d;
} mystruct;

void main()
{
int i;
uint8_t * test;
mystruct *str, s;
str = &s;

str->a = 0xFFEEDDCC;
str->b = 0;
str->c = 0;
str->d = 0;

test = (uint8_t *)&st;
for(i = 0; i < sizeof(mystruct); i++)
{
printf(“ %x \\n\\r“, test[i]);
}
}

Citovat příspěvek

 

 

 

Přihlášení k mému účtu

Uživatelské jméno:

Heslo: