일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- 최강욱
- 고민정
- 유튜버 김재석
- 스콜피온킹
- 은혜의 강 교회
- 제넥신
- 뭉쳐야 찬다
- 금리인하
- 성남 코로나 확진자
- 임영규
- 이상형 만들기
- 픽크루
- 김영권 아내
- libtins
- 불가피
- 학교 개학 연기 4월
- 이태원 클라쓰 15회 예고
- 조희연
- 이지혜
- 미국 금리인하
- 폰폰테스트
- 성남은혜의강교회
- 킹덤 고근희
- 해킹
- 리리남매
- 스페인 코로나
- 김영권
- 김재석
- 홍혜걸
- 양적완화
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