1. 인텔 방식
unsigned char CalcChecksum(unsigned char *data, int leng) { unsigned char csum; csum = 0xFF; for (;leng > 0;leng--) csum += *data++; return ~csum; }
인텔 방식의 마이크로프로세서 실행파일 체크섬의 예
:10010000214601360121470136007EFE09D2190140 :100110002146017EB7C20001FF5F16002148011988 :10012000194E79234623965778239EDA3F01B2CAA7 :100130003F0156702B5E712B722B732146013421C7 :00000001FF
Start code Byte count Address Record type Data Checksum
데이터만 더하면
:100130003F0156702B5E712B722B732146013421C7
FF + 10 + 01 + 30 + 3F + 01 + 56 + 70 + 2B + 5E + 71 + 2B + 72 + 2B +73 + 21 + 46 + 01 + 34 + 21
= 538
한바이트로 모듈라를 취하고, 다시 1의 보수를 취하면 계산이 끝난다. ~38 = C7
2. 모토로라 방식
unsigned char CalcChecksum(unsigned char *data, int leng) { unsigned char csum; csum = 0; for (;leng > 0;leng--) csum += *data++; return 0xFF - csum; }
모토로라 방식의 마이크로프로세서 실행파일 체크섬의 예
S00F000068656C6C6F202020202000003C S11F00007C0802A6900100049421FFF07C6C1B787C8C23783C6000003863000026 S11F001C4BFFFFE5398000007D83637880010014382100107C0803A64E800020E9 S111003848656C6C6F20776F726C642E0A0042 S5030003F9 S9030000FC
Start code Record type Byte count Address Data Checksum
데이터만 더하면
S111003848656C6C6F20776F726C642E0A0042
11 + 00 + 38 + 48 + 65 + 6C + 6C + 6F + 20 + 77 + 6F + 72 + 6C + 64 + 2E + 0A +00 = 4BD
4BD에서 한바이트로 모듈라를 취하고, 0xFF에서 빼면 계산이 끝난다.
FF - BD = 42
'프로토콜' 카테고리의 다른 글
[외부문서] A look at PDP Context in UMTS networks (0) | 2016.07.09 |
---|---|
WPS (Wi-Fi Protected Setup Specification) 규격 (0) | 2013.01.21 |
Wi-Fi (802.11) 규격 (0) | 2013.01.21 |