2010. 8. 4. 19:50
압축 알고리즘에서 사용된 reserved 된 값과 얻는 핵심 알고 리즘 입니다.
2010. 8. 4. 19:50 in 관련자료
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.
1 2 // 비트수를 읽어 들여서 int값을 내보낸다. 3 static int READBITS(int a) { 4 5 // 결과값을 저장, 및 읽어 들일 비트수를 기록할 변수. 6 int res = 0, i = a; 7 8 // 읽을 비트가 8비트 이상일 경우 에러 기록. 9 if (a > 8) { 10 11 fprintf(stderr, "error %d ", a); 12 13 } 14 15 // 읽어 들인 비트 수 가 0 으로 될때까지 반복. 16 while(i--) { 17 18 // ReadBit을 통한 값과 왼쪽으로 쉬프트 한 값을 or 시킵니다. 19 // 0000 0010 0110 1110 20 // ==> ==> ==> ==> 1111 21 // 0001 0001 0001 0001 22 res = (res<<1) | READBIT(); 23 } 24 25 if(a) { 26 27 // 만약 a가 0 보다 클 경우 28 // 예약된 값에서 a 비트 만큼 뺀 값을 우측으로 쉬프트 합니다. 29 res = bitReverse[res]>>(8-a); 30 31 } 32 33 return res; 34 } 35 36 37 // 이 함수는 단순히 비트를 읽어서 리턴 해주며, 38 // 더이상 읽을 비트가 없을 경우 1 바이트를 읽습니다. 39 static int READBIT(void) { 40 41 // 결과값 42 int carry =0; 43 44 //참고로 bb는 Char 값 = 1 을 갖고 있으며, Char 1 unsigned byte형입니다. 45 // bb 와 1을 And 연산 시킨후 Carry에 결과값을 저장 합니다. 46 carry = (bb & 1); 47 48 // bb의 값을 우측으로 쉬프트 합니다. 49 bb >>= 1; 50 51 // 만약 bb 값이 0 일 경우 52 // 바이트를 읽어 들이죠. 53 if(bb==0) { 54 bb = READBYTE(); 55 carry = (bb & 1); 56 bb = (bb>>1) | 0x80; 57 } 58 59 // bb값이 0이 아니 면 bb에 있는 1비트 값을 리턴 합니다. 60 return carry; 61 } 62 63 64 65 66 67 68 69 70 71 72 // BitReserved 된 값. 73 static const unsigned short bitReverse[] = { 74 0x00, 0x80, 0x40, 0xc0, 0x20, 0xa0, 0x60, 0xe0, 75 0x10, 0x90, 0x50, 0xd0, 0x30, 0xb0, 0x70, 0xf0, 76 0x08, 0x88, 0x48, 0xc8, 0x28, 0xa8, 0x68, 0xe8, 77 0x18, 0x98, 0x58, 0xd8, 0x38, 0xb8, 0x78, 0xf8, 78 0x04, 0x84, 0x44, 0xc4, 0x24, 0xa4, 0x64, 0xe4, 79 0x14, 0x94, 0x54, 0xd4, 0x34, 0xb4, 0x74, 0xf4, 80 0x0c, 0x8c, 0x4c, 0xcc, 0x2c, 0xac, 0x6c, 0xec, 81 0x1c, 0x9c, 0x5c, 0xdc, 0x3c, 0xbc, 0x7c, 0xfc, 82 0x02, 0x82, 0x42, 0xc2, 0x22, 0xa2, 0x62, 0xe2, 83 0x12, 0x92, 0x52, 0xd2, 0x32, 0xb2, 0x72, 0xf2, 84 0x0a, 0x8a, 0x4a, 0xca, 0x2a, 0xaa, 0x6a, 0xea, 85 0x1a, 0x9a, 0x5a, 0xda, 0x3a, 0xba, 0x7a, 0xfa, 86 0x06, 0x86, 0x46, 0xc6, 0x26, 0xa6, 0x66, 0xe6, 87 0x16, 0x96, 0x56, 0xd6, 0x36, 0xb6, 0x76, 0xf6, 88 0x0e, 0x8e, 0x4e, 0xce, 0x2e, 0xae, 0x6e, 0xee, 89 0x1e, 0x9e, 0x5e, 0xde, 0x3e, 0xbe, 0x7e, 0xfe, 90 0x01, 0x81, 0x41, 0xc1, 0x21, 0xa1, 0x61, 0xe1, 91 0x11, 0x91, 0x51, 0xd1, 0x31, 0xb1, 0x71, 0xf1, 92 0x09, 0x89, 0x49, 0xc9, 0x29, 0xa9, 0x69, 0xe9, 93 0x19, 0x99, 0x59, 0xd9, 0x39, 0xb9, 0x79, 0xf9, 94 0x05, 0x85, 0x45, 0xc5, 0x25, 0xa5, 0x65, 0xe5, 95 0x15, 0x95, 0x55, 0xd5, 0x35, 0xb5, 0x75, 0xf5, 96 0x0d, 0x8d, 0x4d, 0xcd, 0x2d, 0xad, 0x6d, 0xed, 97 0x1d, 0x9d, 0x5d, 0xdd, 0x3d, 0xbd, 0x7d, 0xfd, 98 0x03, 0x83, 0x43, 0xc3, 0x23, 0xa3, 0x63, 0xe3, 99 0x13, 0x93, 0x53, 0xd3, 0x33, 0xb3, 0x73, 0xf3, 100 0x0b, 0x8b, 0x4b, 0xcb, 0x2b, 0xab, 0x6b, 0xeb, 101 0x1b, 0x9b, 0x5b, 0xdb, 0x3b, 0xbb, 0x7b, 0xfb, 102 0x07, 0x87, 0x47, 0xc7, 0x27, 0xa7, 0x67, 0xe7, 103 0x17, 0x97, 0x57, 0xd7, 0x37, 0xb7, 0x77, 0xf7, 104 0x0f, 0x8f, 0x4f, 0xcf, 0x2f, 0xaf, 0x6f, 0xef, 105 0x1f, 0x9f, 0x5f, 0xdf, 0x3f, 0xbf, 0x7f, 0xff 106 }; 107 108
'관련자료' 카테고리의 다른 글
Software의 크기 및 산출관련 글 (0) | 2010.09.27 |
---|---|
Dynamic Function Loader. (0) | 2010.09.26 |
Zip에 사용된 Deflate Compressed Data Format 의 세부 사항 (2) | 2010.07.14 |
압축 풀때 사용되는 Deflate 알고리즘. (0) | 2010.06.06 |
ZIP File Format Specification (0) | 2010.05.14 |