Portál AbcLinuxu, 12. května 2025 21:45

Dotaz: Big vs. Little Endian v GCC

29.5.2004 16:15 Petr
Big vs. Little Endian v GCC
Přečteno: 201×
Odpovědět | Admin
Dobry den
Nevi nekdo, jestli se da gcc-cku explicitne rict, jestli ma ukladat data do souboru s Big/Little Endian ???
Priklad:
short int c=1;
fwrite(&c, 2, 1, fw);
Kdyz se potom podivam do toho souboru, tak zjistim, ze prvni dva bajty jsou 01 00, potreboval bych, aby se to ulozilo jako 00 01.
Diky
Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

29.5.2004 17:30 unchallenger | skóre: 69 | blog: unchallenger
Rozbalit Rozbalit vše Re: Big vs. Little Endian v GCC
Odpovědět | | Sbalit | Link | Blokovat | Admin
Ne. Ten program by pak nefungoval, protože musíš mít reprezentované hodnoty tak, jak jim rozumí procesor, na kterém to běží.

Nicméně existují konverzní funkce, které ty bajty přehážou (pak samozřejmě bude mít ten int pro tvůj procesor úplně jinou hodnotu, ale můžeš ho někam zapsat), jak v libc, tak glib, tak ledaskde jinde (kromě toho si lze konverzi i snadno napsat), což ale už není věc gcc.

Nebo to přelož pro architekturu, které má ten správný byterorder, a pak to na ní spouštěj ;)
29.5.2004 21:52 Maude Lebowski
Rozbalit Rozbalit vše Re: Big vs. Little Endian v GCC
Odpovědět | | Sbalit | Link | Blokovat | Admin
neda se to, nema samo smysl to delat, vzdyt kdyz by se ulozila cisla s opacnym poradim byte tak by to bylo uplne jine cislo.

pokud potrebujes prehazovat byte tak pouzij funci swab (man swab) ktera je vetsinou realizovana nejaokou instrukci procesoru takze je rychla nebo na slozitejsi manipulace udelej pres strukturu union a do te dej vsechna potreba cisla (int, short, long) a pole z char (neni to presna synataxe):
union
 int a
 long b
 short c
 char t
end union
a pak muzes udelat:
a = 26
print t[1], t[2]
30.5.2004 00:03 r0b0t
Rozbalit Rozbalit vše Re: Big vs. Little Endian v GCC
Smysl to mit muze. Co kdyz na jedne architekture chci predzvykat data pro druhou architekturu? Otazkou zustava proc by nekdo neco takoveho potreboval... :-)
30.5.2004 09:30 unchallenger | skóre: 69 | blog: unchallenger
Rozbalit Rozbalit vše Re: Big vs. Little Endian v GCC
Potřebuje to někdo dost často, při vytváření v podstatě jakýchkoli binárních dat, např. při TCP/IP komunikaci z i386 to potřebuješ furt ;)

Ale nemá s tím nic společného kompilátor, prostě se to musí převést...
30.5.2004 10:36 MarSik | skóre: 16 | Brno
Rozbalit Rozbalit vše Re: Big vs. Little Endian v GCC
Tohle mi prijde jako dost divne reseni ;) ja bych proste pouzil htonl, htons, ntohs a ntohl funkce ;)
Nothing is foolproof...fools are very clever.

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.