일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- 제넥신
- 김영권
- 조희연
- 해킹
- 뭉쳐야 찬다
- 미국 금리인하
- 킹덤 고근희
- 이태원 클라쓰 15회 예고
- 픽크루
- 이지혜
- 고민정
- 유튜버 김재석
- 리리남매
- 스콜피온킹
- 불가피
- 홍혜걸
- 이상형 만들기
- 성남 코로나 확진자
- 김재석
- 금리인하
- 은혜의 강 교회
- libtins
- 스페인 코로나
- 최강욱
- 양적완화
- 임영규
- 김영권 아내
- 성남은혜의강교회
- 폰폰테스트
- 학교 개학 연기 4월
Archives
- Today
- Total
Dork's port
[C++] MAC Address 저장하기 본문
MAC Address를 저장하는 간단한 소스코드를 공개할까합니다.
아마 많은 분들께서 MAC Address를 저장하실때 보통 아래와 같이 선언하여 많이 사용하고 계실겁니다.
uint8_t mac[6]; memcpy(mac,otherMac,6);
uint8_t 타입으로 1바이트 크기의 배열 6개를 잡아 총 48비트를 만들어 MAC Address를 저장하고, 저장시에 memcpy를 이용하여 address를 copy합니다.
그러나, 이렇게 사용하면 가독성이 떨어지고 memcpy()를 소스코드에 많이 적어야 하는 불편함이 있습니다.
이러한 문제를 class와 연산자 오버로딩(opperator overloading)을 이용하여 아래와 같이 쉽게 사용가능합니다.
//mac.h #ifndef MAC_H #define MAC_H #include <cstring> #include <iostream> class Mac { public: uint8_t macAddr[6]; Mac(); Mac& operator=(char *addr); Mac& operator=(uint8_t *addr); Mac& operator=(Mac &other); }; #endif // MAC_H
//mac.cpp #include "mac.h" #include <cstring> #include <string> Mac::Mac() { } Mac& Mac::operator=(char *addr) { memcpy(this->macAddr,addr,6); return *this; } Mac& Mac::operator=(uint8_t *addr) { memcpy(this->macAddr,addr,6); return *this; } Mac& Mac::operator=(Mac &other) { memcpy(this->macAddr,other.macAddr,6); return *this; }
위의 헤더파일을 이용하여 더욱 가독성 높은 코딩을 할 수있습니다.
사용은 아래와 같이 할 수 있습니다.
//mac.cpp #include <iostream> #include "mac.h" int main() { uint8_t* destMac; //이때 destMac이 패킷에서 읽어온 Ether header에 Destination Address를 가르킨다고 가정 Mac srcMac; Mac tmpMac; srcMac=destMac; //memcpy(srcMac,destMac,6)과 동일 return 0; }
위와 같이 memcpy를 무차별적으로 소스코드에 적지 않고 변수의 선언 타입을 통해 훨씬더 자료 목적을 알 수 있습니다.
또한, operator==을 이용하여 비교 연산 또한 쉽게 가능합니다.
'Develop' 카테고리의 다른 글
[C++] LibTins를 통한 802.11 Decrypt(무선패킷 복호화 하기) (0) | 2017.11.30 |
---|---|
[C++] 802.11(wireless) 라이브러리 사용하기 (tins Library 사용하기) (0) | 2017.11.20 |
Class function과 const (0) | 2017.10.26 |
C++ Console 특정 부분 재 출력하기(Console clear, Console up line, Cosole up prompt) (0) | 2017.10.21 |
아스키 코드표 (2) | 2017.10.19 |
Comments