ÃÑ ÆäÀÌÁö ¼ö : 3224
![]()
|
Facebook Joinc ±×·ì
Joinc QA »çÀÌÆ®
![]()
Tweet
joinc´Â Firefox¿Í chrome¿¡¼ Å×½ºÆ® Çß½À´Ï´Ù. IE¿¡¼´Â Å×À̺íÀÌ ±úÁö°Å³ª À̹ÌÁö°¡ º¸ÀÌÁö ¾ÊÀ» ¼ö ÀÖ½À´Ï´Ù. ƯÈ÷ ±¸±Û DocsÀ̹ÌÁöÀÇ °æ¿ì ¿¢¹Úó¸®µÉ ¼ö ÀÖ½À´Ï´Ù. bit field
bit field´Â ÄÄÇ»ÅÍ °úÇп¡¼ »ç¿ëÇÏ´Â ¿ë¾î·Î, µ¥ÀÌÅÍÀÇ ÃÖ¼Ò´ÜÀ§ÀÎ bit ¸¦ ÀÌ¿ëÇØ¼ µ¥ÀÌÅ͸¦ °£´ÜÈ÷ ÀúÀåÇÏ´Â ¹æ¹ýÀ» Á¦½ÃÇÑ´Ù. ´ÜÀÏ ºñÆ® Áï, 0°ú 1À» »ç¿ëÇϱ⠶§¹®¿¡ on/offÀÇ »óÅÂÁ¤º¸¸¦ ÀúÀåÇϴµ¥ À¯¿ëÇÏ°Ô »ç¿ëÇÒ ¼ö ÀÖ´Ù. °¡Àå ³Î¸® »ç¿ëµÇ´Â ¿µ¿ªÀº flag¸¦ ÀÌ¿ëÇÑ »óÅÂÀúÀåÀÏ °ÍÀÌ´Ù. C ¿¹Á¦#include <stdio.h> #define STATUS_WATCHES_TV (1 << 0) /* 0x01 */ #define STATUS_READS_BOOK (1 << 1) /* 0x02 */ #define STATUS_PLAY_GAMES (1 << 2) /* 0x04 */ #define STATUS_EAT_FOOD (1 << 3) /* 0x08 */ unsigned int status; void setStatus(unsigned int flag) { status |= flag; } void resetStatus(unsigned char flag) { status &= ~flag; } unsigned int getStatus(unsigned int flag) { return (status & flag) != 0; } int main(int argc, char ** argv) { setStatus(STATUS_WATCHES_TV); setStatus(STATUS_PLAY_GAMES); if(getStatus(STATUS_WATCHES_TV)) { printf("I Watching TV\n"); } if(getStatus(STATUS_READS_BOOK)) { printf("I reading book\n"); } if(getStatus(STATUS_PLAY_GAMES)) { printf("I playing game\n"); } if(getStatus(STATUS_EAT_FOOD)) { printf("I eat food!\n"); } }°¢°¢ÀÇ »óŰªÀ» À§Çؼ ÇϵåÄÚµùµÈ °ªÀ» »ç¿ëÇÏ´Â ´ë½Å¿¡, bit field¸¦ »ç¿ëÇϰí ÀÖ´Ù. °¢ Çʵ忡 °ªÀº shift ¿¬»êÀ» »ç¿ëÇϰí ÀÖÀ¸¹Ç·Î, bit ¿¬»êÀ» ÀÌ¿ëÇØ¼ °£´ÜÈ÷ »óŸ¦ ¼³Á¤ÇÏ°í ¾ò¾î¿Ã ¼ö ÀÖ´Ù. °¡µ¶¼ºµµ ´ýÀ¸·Î ¾òÀ» ¼ö ÀÖ´Ù. ±¸Á¶Ã¼¿Í bit field
±¸Á¶Ã¼¿¡¼ bit field°¡ »ç¿ëµÇ´Â °æ¿ì´Â ÈçÇÏÁö ¾ÊÀ» °ÍÀÌ´Ù. endian°ú °ü·ÃµÈ ¹®Á¦µé¶§¹®¿¡ °¡µ¶¼º°ú À¯Áöº¸¼ö¼ºÀÌ ¶³¾îÁú¼ö Àֱ⠶§¹®ÀÌ´Ù. Ä¿³ÎÀÇ °æ¿ì ³×Æ®¿öÅ© ÇÁ·ÎÅäÄÝ(TCP/IP¿Í °°Àº) ±¸Á¶Ã¼ Á¤ÀÇÇϱâ À§Çؼ ÀϺΠ»ç¿ëµÈ´Ù. ¾Æ·¡´Â tcp Çì´õ ±¸Á¶Ã¼ÀÌ´Ù. endian ¹®Á¦¸¦ ÇØ°áÇϱâ À§Çؼ #if¹®À» »ç¿ëÇϰí ÀÖ´Ù.
struct tcphdr
{
u_int16_t th_sport; /* source port */
u_int16_t th_dport; /* destination port */
tcp_seq th_seq; /* sequence number */
tcp_seq th_ack; /* acknowledgement number */
# if __BYTE_ORDER == __LITTLE_ENDIAN
u_int8_t th_x2:4; /* (unused) */
u_int8_t th_off:4; /* data offset */
# endif
# if __BYTE_ORDER == __BIG_ENDIAN
u_int8_t th_off:4; /* data offset */
u_int8_t th_x2:4; /* (unused) */
# endif
u_int8_t th_flags;
# define TH_FIN 0x01
# define TH_SYN 0x02
# define TH_RST 0x04
# define TH_PUSH 0x08
# define TH_ACK 0x10
# define TH_URG 0x20
u_int16_t th_win; /* window */
u_int16_t th_sum; /* checksum */
u_int16_t th_urp; /* urgent pointer */
};
À§ÀÇ °æ¿ì´Â º¸±â°¡ Èûµå´Ï, Á»´õ ÀϹÝÀûÀÎ °æ¿ì¸¦ º¸ÀÚ.
#include <stdio.h>
struct myStatus
{
unsigned int watch_tv:1;
unsigned int reads_book:1;
unsigned int play_book:1;
unsigned int eat_book:1;
};
int main(int argc, char **argv)
{
struct myStatus mstatus;
mstatus.watch_tv = 1;
mstatus.reads_book = 1;
printf("Size of %ld\n",sizeof(struct myStatus));
if(mstatus.watch_tv)
{
printf("I'm watch TV\n");
}
}
|
|
|
EmailÀ» ±âÀÔÇϸé, ´ñ±ÛÀÌ ¸ÞÀÏ·Î Àü´ÞµË´Ï´Ù. |
|