39047

39047



174


ROZDZIAŁ 24. PRZENOŚNOŚĆ PROGRAMÓW

int mainO {

• if BYTE.ORDER — BIG.ENDIAN

printf("Porządek big-endian (4321)\nH);

•elif __BYTE_ORDER == __LITTLE.ENDIAN

printf("Porządek little-endian (1234)\nM);

#elif defined „PDP.ENDIAN kk __BYTE.ORDER == __PDP.ENDIAN

printf("Porządek PDP (3412)\n");

#else

printf ("Inny porządek «d)\n\ „BYTE.ORDER);

Sendif

return 0;

}

Na podstawie makra _BYTE_ORDEFl można skonstruować funkcję, która będzie konwertować liczb)’ pomiędzy porządkiem różnymi porządkami:

*include <endian.h> ftinclude <stdio.h> sinclude <stdint.h>

uint32_t convert_order32(uint32_t val, unsigned from, unsigned to) { if (from—to) { return val;

>    else {

uint32_t ret ■ 0;

unsigned char tmp[5] ■ { 0, 0, 0, 0,0); unsigned char *ptr ■ (unsigned char«)&val; unsigned div ■ 1000;

do tmpffrom / div X 10] ■ •ptr*-»; while ((div /■ 10)); ptr * (unsigned char*)&ret; div ■ 1000;

do *ptr*+ ■ tnp[to / div X 10]; while ((div /■ 10)); return ret;

>

)

#def ine LE_T0.H(val) Sdefine H.T0_LE(val) idefine BE_T0_H(val) idefine H_T0_BE(val) •define PDP_T0_H(val) Sdefine H_T0_PDP(val)


convert_order32((val), convert_order32((val), convert_order32((val), convert_order32((val), convert_order32((val), convert_order32((val),


1234, __BYTE.ORDER)

__BYTE.ORDER, 1234)

4321, „BYTE.ORDER) „BYTE.ORDER, 4321) 3412. „BYTE.ORDER) „BYTE.ORDER, 3412)


int raain O

{

LE_T0_H(0x01020304)); H_T0_LE(0x01020304)); BE.T0_H(0x01020304)); H_T0_BE(0x01020304)); PDP_T0_H(0x01020304)); H_T0_PDP(0x01020304));


printf (*7,08x\n" , printf ("7,08x\n", printf ("7,08x\n", printf (,7,08x\n", printf ("7,08x\n", printf C7,08x\n", return 0;

)

Ciągle jednak polegamy na uiestaiKlardowym pliku nagłówkowym endian.h. Można go wyeliminować sprawdzając porządek bajtów w czasie wykonywania programu:



Wyszukiwarka

Podobne podstrony:
172 ROZDZIAŁ 24. PRZENOŚNOŚĆ PROGRAMÓW mie korzystamy z rozszerzenia naszego kompilatora. Rozważmy
176IWZDZ1AL 24. PRZENOŚNOŚĆ PROGRAMÓW a w kodzie programu zamiast słówka inline stosować .Jnline___C
7b (3) I Zadanie 3. (lOp.) Dany jest następujący program: int f(int i) { if(x>0) return x+f(x-l);
zal 07 3 Studia zaoczne. 2006/2007 Zestaw 1 12 Wyjainij działanie programu: void sig_usr(int signo)
24 IWZDZ1AL 5. PIERWSZY PROGRAM int main (void) int oznacza, że funkcja zwróci (tzn. przyjmie wartoś
89845 zdj9 (2) Kilka zadań z C Jaka będzie wartość zmiennej c po wykonaniu fragmentu programu? int
11vcl01 while (relTest){ // One or morę // statements // go here} // Rest of program // contin
SDC11447 i Operatory Dany jest fragment programu: int n = 10, p = 9, q; •q = (n
SDC11447 i Operatory Dany jest fragment programu: int n = 10, p = 9, q; •q = (n
I 2. Niedopuszczalne jest ręczne przenoszenie przedmiotów o masie przckracz.if.iccj 30 kg na wy
public: int weżWart(int nPrzes){ if (nPrzes < sizeof(buf) && nPrzes > 0) return buf
zadania09 ZADANKA Z EGZAMINU - 30.01.2002 t,. 1. Rozpatrzmy poniższy program: int k, p; double Onc(i

więcej podobnych podstron