C 프로그래밍 : 네트워크 인터페이스 MAC 주소 문자열을 바이트열로 변환
- 프로그래밍/C 프로그래밍
- 2020. 2. 13.
반응형
본 글에서는 문자열 형태로 표현된 네트워크 인터페이스 MAC 주소를 6바이트 길이의 바이트열로 변환하는 방법에 대해 설명한다.
이더넷 네트워크 인터페이스의 MAC 주소는 6바이트의 길이를 가지며, 보통 다음과 같이 표현된다.
- 리눅스 계열 운영체제 : 00:01:02:03:04:05
- 윈도우즈 운영체제 : 00-01-02-03-04-05
MAC 주소가 위와 같은 형태의 문자열로 표현되어 있을 때(예: "00:01:02:03:04:05"), 이 문자열을 6바이트 길이의 바이트열로 변환하는 간단한 함수를 다음과 같이 구현할 수 있다.
#include <stdint.h>
#include <stdio.h>
#include <string.h>
/// MAC 주소 길이
#define MAC_ALEN 6
/// MAC 주소 문자열 길이
#define MAC_ADDR_STR_LEN 17
/**
* MAC 주소 문자열을 바이트열로 변환한다.
*
* @param[in] mac_addr_str MAC 주소 문자열 (예: "00:01:02:03:04:05" 또는 "00-01-02-03-04-05")
* @param[out] mac_addr 변환된 바이트열이 저장될 배열
*
* @retval 0: 성공
* @retval -1: 실패
*/
int ConvertMacAddrStr2Array(const char *mac_addr_str, uint8_t mac_addr[MAC_ALEN])
{
int res, i, val;
char temp[MAC_ADDR_STR_LEN+1];
/*
* 유효하지 않은 MAC 주소 문자열 길이
*/
if(strlen(mac_addr_str) != MAC_ADDR_STR_LEN) {
return -1;
}
/*
* MAC 주소 문자열을 임시버퍼에 복사 후,
* 콜론(:) 또는 대시(-) 대신 종료 문자를 삽입하여 문자열을 분리하고 각각 16진수로 읽어 바이트열에 저장한다.
*/
memcpy(temp, mac_addr_str, MAC_ADDR_STR_LEN);
for(i = 0; i < MAC_ALEN; i++) {
temp[(3*i)+2] = '\0';
res = sscanf((const char *)&temp[3*i], "%x", &val);
if (res == 0) {
return -1;
}
mac_addr[i] = (char)val;
}
return 0;
}
/**
* 테스트 어플리케이션
*/
int main(int argc, char *argv[])
{
char *mac_addr_str = "00:01:02:03:04:05";
uint8_t mac_addr[MAC_ALEN];
int ret = ConvertMacAddrStr2Array(mac_addr_str, mac_addr);
if (ret) {
printf("Fail to convert MAC address string\n");
return -1;
}
printf("MAC address string - %s\n", mac_addr_str);
printf("MAC address - %02X:%02X:%02X:%02X:%02X:%02X\n",
mac_addr[0], mac_addr[1], mac_addr[2], mac_addr[3], mac_addr[4], mac_addr[5]);
return 0;
}
'프로그래밍 > C 프로그래밍' 카테고리의 다른 글
빌드 에러 - undefined reference to log10f (0) | 2021.03.22 |
---|---|
Object Identifier asn.1 인코딩 방법 (0) | 2021.02.11 |
C 프로그래밍 : 두 GPS 좌표간 목적지 방위각(bearing) 계산하기 (0) | 2020.04.29 |
C 프로그래밍 : 두 GPS 좌표간 거리(distance) 구하기 (3) | 2020.04.29 |
C 프로그래밍 : MAC 주소 출력 매크로 - MAC 주소 출력문을 간단하게. (0) | 2020.02.12 |
C 프로그래밍 : 배열 데이터를 16진수 형식으로 출력하기(Hex dump) (0) | 2020.02.09 |
C 프로그래밍 : 16진수 문자열을 바이트열로 변환하는 함수 (0) | 2020.02.08 |
나만의 간단한 로그출력 함수 만들기 (0) | 2019.07.28 |