ÃÑ ÆäÀÌÁö ¼ö : 3224

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



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

Contents

1 Big-Endian°ú Little-Endian
1.1 ¼Ò½ºÄÚµå 1
1.2 ½ÇÇà°á°ú 1
1.3 ¼Ò½ºÄÚµå 2
1.4 ½ÇÇà°á°ú 2
1.4.1 ù¹øÂ° °á°ú ºÐ¼®
1.4.2 µÎ¹øÂ° °á°ú ºÐ¼®
1.4.3 ¼¼¹øÂ° °á°ú ºÐ¼®
1.5 ¼Ò½ºÄÚµå 3
1.6 ½ÇÇà°á°ú 3


1 Big-Endian°ú Little-Endian


ÀÛ¼ºÀÚ: mwyun (¸Û)

´ÙÀ½ ¸µÅ©´Â Endian¿¡ ´ëÇÑ ÀÚ·áÀ̹ǷΠ¸ÕÀú º¸½Ã±â ¹Ù¸³´Ï´Ù.

http://www.joinc.co.kr/modules.php?name=News&file=article&sid=79

http://terms.co.kr/big-endian.htm

http://docs.hp.com/ko/5990-8178/ch02s10.html

Á¤¸®¸¦ ÇÏÀÚ¸é ºò ¿£µð¾È°ú ¸®Æ² ¿£µð¾ÈÀº ÄÄÇ»ÅÍ ¸Þ¸ð¸®¿¡ ÀúÀåµÈ ¹ÙÀÌÆ®µéÀÇ ¼ø¼­¸¦ ¼³¸íÇÏ´Â ¿ëÀÌÀ̸ç, Á¤¼öÇü µ¥ÀÌÅ͸¦ ÀúÀåÇϸç, 
ºò ¿£µð¾ÈÀº ¸Þ¸ð¸®ÀÇ ³·Àº ¹øÁö¿¡ Å« ÂÊÀ» ¸ÕÀú ÀúÀåµÇ´Â ¼ø¼­À̸ç, ¸®Æ² ¿£µð¾ÈÀº ÀÛÀº ÂÊÀ» ¸ÕÀú ÀúÀåÇÏ´Â ¹æ½ÄÀÔ´Ï´Ù. 
 
Å« ÂÊ: »óÀ§¹ÙÀÌÆ®ÀÌ¸ç ¹ÙÀÌÆ®ÀÇ ¿­¿¡¼­ °¡Àå Å« °ª 
ÀÛÀº ÂÊ: ÇÏÀ§¹ÙÀÌÆ®ÀÌ¸ç ¹ÙÀÌÆ®ÀÇ ¿­¿¡¼­ °¡Àå ÀÛÀº °ª 
 
2¹ÙÀÌÆ® Á¤¼öÀÎ °æ¿ì Á¤¼ö 1234¸¦ ÀúÀåÇϸé 16Áø¼ö 0x04d2ÀÌ°í »óÀ§¹ÙÀÌÆ®°ªÀº 04À̰í ÇÏÀ§¹ÙÀÌÆ®°ªÀº d2ÀÔ´Ï´Ù. 
À̶§ ºò ¿£µð¾È°ú ¸®Æ² ¿£µð¾ÈÀº °¢°¢ ´ÙÀ½°ú °°ÀÌ ÀúÀåµË´Ï´Ù. 
 
ºò ¿£µð¾È 
    +- 0byte -+- 1byte -+ 
    |         |         | 
    +---------+---------+ 
    |    04   |    d2   | 
    +---------+---------+ 
    ^                   ^  
    |                   | 
¸Þ¸ð¸®ÀÇ ³·Àº ¹øÁö  ¸Þ¸ð¸®ÀÇ ³ôÀº ¹øÁö 
 
¸®Æ² ¿£µð¾È 
 
    +- 0byte -+- 1byte -+ 
    |         |         | 
    +---------+---------+ 
    |    d2   |    04   | 
    +---------+---------+ 
    ^                   ^  
    |                   | 
¸Þ¸ð¸®ÀÇ ³·Àº ¹øÁö  ¸Þ¸ð¸®ÀÇ ³ôÀº ¹øÁö 
 
4¹ÙÀÌÆ® Á¤¼öÀÎ °æ¿ì Á¤¼ö 123456789¸¦ ÀúÀåÇϸé 16Áø¼ö 0x075bcd15ÀÌ°í »óÀ§¹ÙÀÌÆ®°ªÀº 07À̰í ÇÏÀ§¹ÙÀÌÆ®°ªÀº 15ÀÔ´Ï´Ù. 
À̶§ ºò ¿£µð¾È°ú ¸®Æ² ¿£µð¾ÈÀº °¢°¢ ´ÙÀ½°ú °°ÀÌ ÀúÀåµË´Ï´Ù. 
 
»óÀ§ ¹ÙÀÌÆ® 07ºÎÅÍ ÇÏÀ§ ¹ÙÀÌÆ® 15±îÁö ÀúÀåÇÑ´Ù. 
ÀúÀåµÇ´Â ¹ÙÀÌÆ® ¼ø¼­: 07 5b cd 15 
  -> 
0x075bcd15 
 
ºò ¿£µð¾È 
    +- 0byte -+- 1byte -+- 2byte -+- 3byte -+ 
    |         |         |         |         | 
    +---------+---------+---------+---------+ 
    |    07   |   5b    |    cd   |   15    | 
    +---------+---------+---------+---------+ 
    ^                                       ^  
    |                                       | 
¸Þ¸ð¸®ÀÇ ³·Àº ¹øÁö                      ¸Þ¸ð¸®ÀÇ ³ôÀº ¹øÁö 
 
ÇÏÀ§¹ÙÀÌÆ® 15ºÎÅÍ »óÀ§ ¹ÙÀÌÆ® 07±îÁö ÀúÀåÇÑ´Ù. 
ÀúÀåµÇ´Â ¹ÙÀÌÆ® ¼ø¼­: 15 cd 5b 07 
        <- 
0x075bcd15 
 
¸®Æ² ¿£µð¾È 
    +- 0byte -+- 1byte -+- 2byte -+- 3byte -+ 
    |         |         |         |         | 
    +---------+---------+---------+---------+ 
    |    15   |   cd    |    5b   |   07    | 
    +---------+---------+---------+---------+ 
    ^                                       ^  
    |                                       | 
¸Þ¸ð¸®ÀÇ ³·Àº ¹øÁö                      ¸Þ¸ð¸®ÀÇ ³ôÀº ¹øÁö 
 

i386 GNU ¸®´ª½º¿¡¼­ ½ÇÇàÇÑ ´ÙÀ½ÀÇ ¼Ò½º ÄÚµå·Î À§ÀÇ °á°ú¸¦ È®ÀÎÇØº¼ ¼ö ÀÖ½À´Ï´Ù.

1.1 ¼Ò½ºÄÚµå 1

#include <stdio.h> 
#include <netinet/in.h> 
 
int main(int argc, char **argv) 
{ 
        int data = 1234; 
        int data2 = 123456789; 
        int data3; 
 
        printf("%04x\n", data); 
        printf("%04x\n", data2); 
        printf("network byte order 2byte: 0x%04x\n", htons(data)); 
        printf("network byte order 4byte: 0x%08x\n", htonl(data2)); 
 
        return 0; 
} 
 

1.2 ½ÇÇà°á°ú 1

[mwyun@iokorea project]$ ./endian2 
04d2 
75bcd15 
network byte order 2byte: 0xd204 
network byte order 4byte: 0x15cd5b07 
 

¹¯°í ´äÇϱâÀÇ blueyear77´ÔÀÇ ´ÙÀ½ Áú¹®¿¡ ´ëÇÑ ´ëº¯ÀÔ´Ï´Ù.
Å×½ºÆ®ÇÑ ½ÇÇà °á°ú¸¦ ¿Ã¸³´Ï´Ù.

http://www.joinc.co.kr/modules.php?op=modload&name=Forum&file=viewtopic&topic=30943&forum=1&2

1.3 ¼Ò½ºÄÚµå 2

#include <stdio.h> 
 
typedef struct __bitmemory { 
unsigned int bit1: 1; // ÇÑ ºñÆ®¸¸ ¾²°Ú´Ù´Â ÀÇ¹Ì 
unsigned int bit2: 1; 
unsigned int bit3: 1; 
unsigned int bit4: 1; 
unsigned int bit5: 1; 
unsigned int bit6: 1; 
unsigned int bit7: 1; 
unsigned int bit8: 1; 
unsigned int bit9: 1; 
unsigned int bit10: 1; 
unsigned int bit11: 1; 
unsigned int bit12: 1; 
unsigned int bit13: 1; 
unsigned int bit14: 1; 
unsigned int bit15: 1; 
unsigned int bit16: 1; 
unsigned int bit17: 1; 
unsigned int bit18: 1; 
unsigned int bit19: 1; 
unsigned int bit20: 1; 
unsigned int bit21: 1; 
unsigned int bit22: 1; 
unsigned int bit23: 1; 
unsigned int bit24: 1; 
unsigned int bit25: 1; 
unsigned int bit26: 1; 
unsigned int bit27: 1; 
unsigned int bit28: 1; 
unsigned int bit29: 1; 
unsigned int bit30: 1; 
unsigned int bit31: 1; 
unsigned int bit32: 1; 
} bitmemory; 
 
void printbitfield(unsigned int a); 
 
int main(int argc, char **argv) 
{ 
    unsigned int a = 0x11223344; 
    char *ptr = &a; 
    int i; 
 
    printf("1byte print: %x %x %x %x\n", 
        *ptr, *(ptr+1), *(ptr+2), *(ptr+3)); 
     
    for (i = 31; i >= 0; i--) 
    { 
        printf("%d", (a >> i) & (unsigned int)0x01); 
        if (i % 4 == 0) 
            printf(" "); 
    } 
    printf("\n"); 
     
    printbitfield(a); 
 
    return 0; 
} 
 
void printbitfield(unsigned int a) 
{ 
    bitmemory aa; 
    memset(&aa, 0x00, sizeof(aa)); 
    memcpy(&aa, &a, 4); 
 
    printf("%d", aa.bit1); 
    printf("%d", aa.bit2); 
    printf("%d", aa.bit3); 
    printf("%d", aa.bit4); 
    printf(" "); 
    printf("%d", aa.bit5); 
    printf("%d", aa.bit6); 
    printf("%d", aa.bit7); 
    printf("%d", aa.bit8); 
    printf(" "); 
    printf("%d", aa.bit9); 
    printf("%d", aa.bit10); 
    printf("%d", aa.bit11); 
    printf("%d", aa.bit12); 
    printf(" "); 
    printf("%d", aa.bit13); 
    printf("%d", aa.bit14); 
    printf("%d", aa.bit15); 
    printf("%d", aa.bit16); 
    printf(" "); 
    printf("%d", aa.bit17); 
    printf("%d", aa.bit18); 
    printf("%d", aa.bit19); 
    printf("%d", aa.bit20); 
    printf(" "); 
    printf("%d", aa.bit21); 
    printf("%d", aa.bit22); 
    printf("%d", aa.bit23); 
    printf("%d", aa.bit24); 
    printf(" "); 
    printf("%d", aa.bit25); 
    printf("%d", aa.bit26); 
    printf("%d", aa.bit27); 
    printf("%d", aa.bit28); 
    printf(" "); 
    printf("%d", aa.bit29); 
    printf("%d", aa.bit30); 
    printf("%d", aa.bit31); 
    printf("%d", aa.bit32); 
    printf("\n"); 
} 
 

1.4 ½ÇÇà°á°ú 2

[mwyun@iokorea project]$ ./endian 
1byte print: 44 33 22 11 
0001 0001 0010 0010 0011 0011 0100 0100 
0010 0010 1100 1100 0100 0100 1000 1000 
 

1.4.1 ù¹øÂ° °á°ú ºÐ¼®

1byte print: 44 33 22 11 
 
INTEL CPUÀº ¸®Æ² ¿£µð¾È ¹æ½ÄÀ̹ǷΠÁ¤»óÀûÀÎ °á°úÀÔ´Ï´Ù.

1.4.2 µÎ¹øÂ° °á°ú ºÐ¼®

0001 0001 0010 0010 0011 0011 0100 0100 
 
¸Þ¸ð¸®¿¡ ÀúÀåµÈ ¹æ½ÄÀÌ Àú·¸´Ù´Â °ÍÀÌ¸ç ½ÇÁ¦ ¿Ã¹Ù¸¥ °ª 11223344¿¡¼­ ÃÖ»óÀ§ ºñÆ®ºÎÅÍ Çϳª¾¿ Ãâ·ÂÇÏ¿´À¸¹Ç·Î À§¿Í °°ÀÌ Ãâ·ÂµÇ´Â °Ç Á¤»óÀÔ´Ï´Ù.


1.4.3 ¼¼¹øÂ° °á°ú ºÐ¼®


0010 0010 1100 1100 0100 0100 1000 1000 
 

ÀÇ¿ÜÀÇ °á°í°¡ ³ª¿Ô³×¿ä ^^;

ÀÏ´Ü À§ÀÇ 2Áø¼ö °ªÀ» 16Áø¼ö·Î º¯È¯Çϸé 22cc4488·Î ÀüÇô ÀÌ»óÇÑ °ªÀÌ ³ª¿Ô½À´Ï´Ù.

¿Ö ±×·²±î¿©?

¾Æ¸¶µµ ºñÆ® Çʵ带 ½á¼­ ½ÇÁ¦·Î ¸Þ¸ð¸®¿¡ ÀúÀåµÇ´Â ¹æ½ÄÀÌ ´Þ¶ó¼­ ±×·²²¨ °°½À´Ï´Ù.

ÂüÁ¶»çÀÌÆ®
±¸Á¶Ã¼ ÀÚüÀÇ Å©±â´Â ¸ðµç ºñÆ® ¸â¹öÀÇ ÃÑ ºñÆ®¼ö¿Í °°À¸¸ç ÂüÁ¶»çÀÌÆ®ÀÇ ±×¸²À» º¸¸é aa.bitmemory2.bit1~aa.bitmemory2.bit32¼øÀ¸·Î ÃÖÇϺñÆ®ºÎÅÍ ÃÖ»óºñÆ®±îÁö ¼ø¼­´ë·Î ÀúÀåµË´Ï´Ù.

±×·±µ¥ ´ÔÀº bit1ºÎÅÍ Ãâ·ÂÇÏ¿´À¸¹Ç·Î °á°ú°¡ °Å²Ù·Î ÂïÈ÷°Ô µÈ°Ì´Ï´Ù.

¹ÙÀÌÆ®¿­À» ¿ª¼øÀ¸·Î Ãâ·ÂÇϸé 0001 0001 0010 0010 0011 0011 0100 0100À¸·Î ¿øÇÏ´Â ¿Ã¹Ù¸¥ °á°ú°¡ ³ª¿À°Ô µË´Ï´Ù.

´ÔÀÌ ºñÆ® Çʵ尡 ¾î¶»°Ô ÀúÀåµÇ´ÂÁö À߸ø ÀÌÇØÇѵí ÇÕ´Ï´Ù.

ÀÚ¼¼ÇÑ°Ç ¼Ò½ºÄÚµå 3¸¦ ÂüÁ¶Çϼ¼¿ä!


1.5 ¼Ò½ºÄÚµå 3

#include <stdio.h> 
 
typedef struct __bitmemory { 
unsigned int bit1: 1; 
unsigned int bit2: 1; 
unsigned int bit3: 1; 
unsigned int bit4: 1; 
unsigned int bit5: 1; 
unsigned int bit6: 1; 
unsigned int bit7: 1; 
unsigned int bit8: 1; 
unsigned int bit9: 1; 
unsigned int bit10: 1; 
unsigned int bit11: 1; 
unsigned int bit12: 1; 
unsigned int bit13: 1; 
unsigned int bit14: 1; 
unsigned int bit15: 1; 
unsigned int bit16: 1; 
unsigned int bit17: 1; 
unsigned int bit18: 1; 
unsigned int bit19: 1; 
unsigned int bit20: 1; 
unsigned int bit21: 1; 
unsigned int bit22: 1; 
unsigned int bit23: 1; 
unsigned int bit24: 1; 
unsigned int bit25: 1; 
unsigned int bit26: 1; 
unsigned int bit27: 1; 
unsigned int bit28: 1; 
unsigned int bit29: 1; 
unsigned int bit30: 1; 
unsigned int bit31: 1; 
unsigned int bit32: 1; 
} bitmemory; 
 
typedef union __uint32 { 
    unsigned int bitmemory1; 
    struct __bitmemory bitmemory2; 
} uint32; 
 
void printuint32_1(unsigned int a); 
void printuint32_2(unsigned int a); 
 
int main(int argc, char **argv) 
{ 
    unsigned int a = 0x11223344; 
 
    printuint32_1(a); // <- À߸øµÈ Ãâ·Â 
    printuint32_2(a); // <- ¿Ã¹Ù¸¥ Ãâ·Â 
 
    return 0; 
} 
 
void printuint32_1(unsigned int a) 
{ 
    uint32 aa; 
    aa.bitmemory1 = a; 
 
    printf("%d", aa.bitmemory2.bit1); 
    printf("%d", aa.bitmemory2.bit2); 
    printf("%d", aa.bitmemory2.bit3); 
    printf("%d", aa.bitmemory2.bit4); 
    printf(" "); 
    printf("%d", aa.bitmemory2.bit5); 
    printf("%d", aa.bitmemory2.bit6); 
    printf("%d", aa.bitmemory2.bit7); 
    printf("%d", aa.bitmemory2.bit8); 
    printf(" "); 
    printf("%d", aa.bitmemory2.bit9); 
    printf("%d", aa.bitmemory2.bit10); 
    printf("%d", aa.bitmemory2.bit11); 
    printf("%d", aa.bitmemory2.bit12); 
    printf(" "); 
    printf("%d", aa.bitmemory2.bit13); 
    printf("%d", aa.bitmemory2.bit14); 
    printf("%d", aa.bitmemory2.bit15); 
    printf("%d", aa.bitmemory2.bit16); 
    printf(" "); 
    printf("%d", aa.bitmemory2.bit17); 
    printf("%d", aa.bitmemory2.bit18); 
    printf("%d", aa.bitmemory2.bit19); 
    printf("%d", aa.bitmemory2.bit20); 
    printf(" "); 
    printf("%d", aa.bitmemory2.bit21); 
    printf("%d", aa.bitmemory2.bit22); 
    printf("%d", aa.bitmemory2.bit23); 
    printf("%d", aa.bitmemory2.bit24); 
    printf(" "); 
    printf("%d", aa.bitmemory2.bit25); 
    printf("%d", aa.bitmemory2.bit26); 
    printf("%d", aa.bitmemory2.bit27); 
    printf("%d", aa.bitmemory2.bit28); 
    printf(" "); 
    printf("%d", aa.bitmemory2.bit29); 
    printf("%d", aa.bitmemory2.bit30); 
    printf("%d", aa.bitmemory2.bit31); 
    printf("%d", aa.bitmemory2.bit32); 
    printf("\n"); 
    printf("0x%08x\n", aa.bitmemory1); 
} 
 
void printuint32_2(unsigned int a) 
{ 
    uint32 aa; 
    aa.bitmemory1 = a; 
 
    printf("%d", aa.bitmemory2.bit32); 
    printf("%d", aa.bitmemory2.bit31); 
    printf("%d", aa.bitmemory2.bit30); 
    printf("%d", aa.bitmemory2.bit29); 
    printf(" "); 
    printf("%d", aa.bitmemory2.bit28); 
    printf("%d", aa.bitmemory2.bit27); 
    printf("%d", aa.bitmemory2.bit26); 
    printf("%d", aa.bitmemory2.bit25); 
    printf(" "); 
    printf("%d", aa.bitmemory2.bit25); 
    printf("%d", aa.bitmemory2.bit24); 
    printf("%d", aa.bitmemory2.bit22); 
    printf("%d", aa.bitmemory2.bit21); 
    printf(" "); 
    printf("%d", aa.bitmemory2.bit20); 
    printf("%d", aa.bitmemory2.bit19); 
    printf("%d", aa.bitmemory2.bit18); 
    printf("%d", aa.bitmemory2.bit17); 
    printf(" "); 
    printf("%d", aa.bitmemory2.bit16); 
    printf("%d", aa.bitmemory2.bit15); 
    printf("%d", aa.bitmemory2.bit14); 
    printf("%d", aa.bitmemory2.bit13); 
    printf(" "); 
    printf("%d", aa.bitmemory2.bit12); 
    printf("%d", aa.bitmemory2.bit11); 
    printf("%d", aa.bitmemory2.bit10); 
    printf("%d", aa.bitmemory2.bit9); 
    printf(" "); 
    printf("%d", aa.bitmemory2.bit8); 
    printf("%d", aa.bitmemory2.bit7); 
    printf("%d", aa.bitmemory2.bit6); 
    printf("%d", aa.bitmemory2.bit5); 
    printf(" "); 
    printf("%d", aa.bitmemory2.bit4); 
    printf("%d", aa.bitmemory2.bit3); 
    printf("%d", aa.bitmemory2.bit2); 
    printf("%d", aa.bitmemory2.bit1); 
    printf("\n"); 
    printf("0x%08x\n", aa.bitmemory1); 
} 
 

1.6 ½ÇÇà°á°ú 3

[mwyun@iokorea project]$ ./endian3 
0010 0010 1100 1100 0100 0100 1000 1000 <- À߸øµÈ Ãâ·Â 
0x11223344 
0001 0001 0010 0010 0011 0011 0100 0100 <- ¿Ã¹Ù¸¥ Ãâ·Â 
0x11223344 
 
EmailÀ» ±âÀÔÇϸé, ´ñ±ÛÀÌ ¸ÞÀÏ·Î Àü´ÞµË´Ï´Ù.