[ÀÌÀü] ¸ñÂ÷

Simple DirectMedia Layer API »ç¿ëÇϱâ

¿£µð¾È ºñÀÇÁ¸¼º(Endian independence)

  • ÇöÀç ½Ã½ºÅÛÀÇ ¿£µð¾È(endianness)À» °áÁ¤Çϱâ

C Àü󸮱â(preprocessor)´Â SDL_BYTEORDER ¸¦ ÇöÀç ½Ã½ºÅÛÀÇ ¹ÙÀÌÆ® ¼ø¼­(byte order)¿¡ µû¶ó SDL_LIL_ENDIAN ¶Ç´Â SDL_BIG_ENDIAN ·Î Á¤ÀÇÇÑ´Ù.

¸®Æ² ¿£µð¾È(little endian) ½Ã½ºÅÛÀº ¾Æ·¡¿Í °°Àº ¼ø¼­·Î µ¥ÀÌŸ¸¦ µð½ºÅ©¿¡ ¾´´Ù :
     [lo-bytes] [hi-bytes]
ºò ¿£µð¾È(big endian) ½Ã½ºÅÛÀº ¾Æ·¡¿Í °°Àº ¼ø¼­·Î µ¥ÀÌŸ¸¦ µð½ºÅ©¿¡ ¾´´Ù :
     [hi-bytes] [lo-bytes]

ÆÁ:
x86½Ã½ºÅÛµéÀº ¸®Æ² ¿£µð¾ÈÀ̸ç, PPC ½Ã½ºÅÛµéÀº ºò ¿£µð¾ÈÀÌ´Ù.
¿¹Á¦:
#include "SDL_endian.h"

#if SDL_BYTEORDER == SDL_LIL_ENDIAN
#define SWAP16(X)    (X)
#define SWAP32(X)    (X)
#else
#define SWAP16(X)    SDL_Swap16(X)
#define SWAP32(X)    SDL_Swap32(X)
#endif
  • ´Ù¸¥ ¿£µð¾ÈÀÇ ½Ã½ºÅ۵鰣ÀÇ µ¥ÀÌŸ º¯È¯

SDL Àº SDL_endian.h ¿¡ ºü¸¥ ¸ÅÅ©·ÎµéÀ» Á¦°øÇÑ´Ù. SDL_Swap16() ¿Í SDL_Swap32() ÇÔ¼ö´Â µ¥ÀÌŸÀÇ ¿£µð¾ÈÀ» ½º¿Ò(swap)½ÃŲ´Ù. ¶ÇÇÑ Æ¯Á¤ ¿£µð¾ÈÀÇ µ¥ÀÌŸ¸¦ ·ÎÄà ½Ã½ºÅÛÀÇ ¿£µð¾ÈÀ¸·Î º¯È¯½ÃÅ°´Â ¸ÅÅ©·Îµµ Á¦°øÇÑ´Ù.

ÆÁ:
¸¸¾à ½Ã½ºÅÛÀÇ ¹ÙÀÌÆ®-¼ø¼­(byte-order)¸¸ ¾Ë°í ½Í°í, ¸ðµç ½º¿Ò ÇÔ¼öµéÀº ÇÊ¿ä¾ø´Ù¸é, SDL_endian.h ´ë½Å¿¡ SDL_byteorder.h ¸¦ ÀÎŬ·çµåÇ϶ó.
¿¹Á¦:
#include "SDL_endian.h"

void ReadScanline16(FILE *file, Uint16 *scanline, int length)
{
    fread(scanline, length, sizeof(Uint16), file);
    if ( SDL_BYTEORDER == SDL_BIG_ENDIAN ) {
        int i;
        for ( i=length-1; i >= 0; --i )
            scanline[i] = SDL_SwapLE16(scanline[i]);
    }
}

[ÀÌÀü] ¸ñÂ÷