Dork's port

[C++] MAC Address 저장하기 본문

Develop

[C++] MAC Address 저장하기

Dork94 2017. 11. 2. 20:18

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==을 이용하여 비교 연산 또한 쉽게 가능합니다.


Comments