endian üũ
ÃÑ ÆäÀÌÁö ¼ö : 3224

Àüü ÇÔ¼ö/¿ë¾î»çÀü
Facebook Joinc ±×·ì   Joinc QA »çÀÌÆ®
ÇöÀçÀ§Ä¡ : Code>C>endian



joinc´Â Firefox¿Í chrome¿¡¼­ Å×½ºÆ® Çß½À´Ï´Ù. IE¿¡¼­´Â Å×À̺íÀÌ ±úÁö°Å³ª À̹ÌÁö°¡ º¸ÀÌÁö ¾ÊÀ» ¼ö ÀÖ½À´Ï´Ù. ƯÈ÷ ±¸±Û DocsÀ̹ÌÁöÀÇ °æ¿ì ¿¢¹Úó¸®µÉ ¼ö ÀÖ½À´Ï´Ù.

¼³¸í

½Ã½ºÅÛÀÇ Little endianÀÎÁö Big endianÀÎÁö °Ë»çÇÑ´Ù. endian¿¡ ´ëÇÑ ÀÚ¼¼ÇÑ ³»¿ëÀº endian¿¡ ´ëÇØ¼­¸¦ Âü°íÇϱ⠹ٶõ´Ù.

»ç¿ë¹æ¹ý

#define BIG_ENDIAN     0 
#define LITTLE_ENDIAN  1 
 
int endian(void); 
 
½Ã½ºÅÛÀÇ endianÀ» °Ë»çÇØ¼­ LittleÀ̸é 1À» BigÀ̸é 0À» ¸®ÅÏÇÑ´Ù.

#include <stdio.h> 
#include <endian.h> 
 
int main() 
{ 
    if ( endian() == LITTLE_ENDIAN) 
        printf("Little endian\n"); 
    else 
        printf("Big endian\n"); 
} 
 

ÄÚµå

int endian(void) 
{ 
    int i = 0x00000001; 
    if ( ((char *)&i)[0] ) 
        return LITTLE_ENDIAN; 
    else 
        return BIG_ENDIAN; 
} 
 

¶Ç ´Ù¸¥ ÄÚµå

¾Æ·¡ °°ÀÌ »ý±ä ÄÚµå´Â ¹«½¼ ¹®Á¦°¡ ÀÖÀ»±î?
int endian(void) 
{ 
    int i = 0x00000001; 
    return ((char *)&i); 
} 
 

ntohl(3)ÀÇ ±¸Çö
uint32 get_data(void *mem, byte size) 
{ 
    uint32 data = 0; 
    byte i; 
 
    if(size <= 4) 
    { 
        for(i = 0; i < size; i++) 
        { 
            data = ((uint32)data << 8) | ((byte *)mem)[i]; 
        } 
    } 
    return(data); 
} 
 

htonlÀÇ ±¸Çö
1. if°¡ µé¾î°¬Áö¸¸ °¡µ¶¼ºÀÌ ÁÁÀº ÄÚµå
uint32 htonl(uint x) 
{ 
    int i=0x00000001; 
    char ar[4]; 
 
    if ( ((char *)&i)[0] ) 
    { 
        byte a[4]; 
        byte b[4]; 
     
        *((uint32 *)a) = x; 
        b[0] = a[3]; 
        b[1] = a[2]; 
        b[2] = a[1]; 
        b[3] = a[0]; 
        return *((uint32 *)b);  
    } 
    else 
    { 
        return x; 
    } 
} 
 

2. if°¡ ¾øÁö¸¸ °¡µ¶¼ºÀÌ ³ª»Û ÄÚµå (cpuÀÇ endian Ư¼ºÀ» ÀÌ¿ëÇÑ ÇÔ¼ö)
uint32 htonl(uint x) 
{ 
    char ar[4]; 
    ar[0] = (x & 0xff000000) >> 24; 
    ar[1] = (x & 0x00ff0000) >> 16; 
    ar[2] = (x & 0x0000ff00) >> 8; 
    ar[3] = (x & 0x000000ff) >> 0; 
    return *(uint32 *)ar; 
} 
 

3. º¸³Ê½º ¾ÏÈ£ ÄÚµå
uint32 htonl(uint x) 
{ 
    char ar[4]; 
    for(i=0; i<4; i++) 
    { 
        ar[i] = (x & (0xff << ((3-i)*8))) >> 8*(3-i); 
    } 
    return *(uint32 *)ar; 
} 
 

º¯°æ»çÇ×

EmailÀ» ±âÀÔÇϸé, ´ñ±ÛÀÌ ¸ÞÀÏ·Î Àü´ÞµË´Ï´Ù.