Click here to Skip to main content
15,885,914 members
Articles / Programming Languages / C

Convert MAC Address String into Bytes

Rate me:
Please Sign up or sign in to vote.
2.50/5 (4 votes)
8 Apr 2009CPOL 60.2K   504   6   4
The code snippet converts MAC Address String Format into Bytes

Introduction 

inet_addr and inet_ntoa are already available for IP address processing. Here, I put the same functionalities for MAC address.

This code snippet converts MAC address string into bytes array and bytes array into MAC address' string.  

Background

I searched the internet but I could not find such a function so I publish it here for every one. 

Using the Code

The code is self explanatory. 

C++
const char cSep = '-'; //Bytes separator in MAC address string like 00-aa-bb-cc-dd-ee

/*
	This function accepts MAC address in string format and returns in bytes. 
	it relies on size of byAddress and it must be greater than 6  bytes.
	If MAC address string is not in valid format, it returns NULL.

	NOTE: tolower function is used and it is locale dependent.
*/
C++
unsigned char* ConverMacAddressStringIntoByte
	(const char *pszMACAddress, unsigned char* pbyAddress)
{
	for (int iConunter = 0; iConunter < 6; ++iConunter)
	{
		unsigned int iNumber = 0;
		char ch;

		//Convert letter into lower case.
		ch = tolower (*pszMACAddress++);

		if ((ch < '0' || ch > '9') && (ch < 'a' || ch > 'f'))
		{
			return NULL;
		}

		//Convert into number. 
		//       a. If character is digit then ch - '0'
		//	b. else (ch - 'a' + 10) it is done 
		//	because addition of 10 takes correct value.
		iNumber = isdigit (ch) ? (ch - '0') : (ch - 'a' + 10);
		ch = tolower (*pszMACAddress);

		if ((iConunter < 5 && ch != cSep) || 
			(iConunter == 5 && ch != '\0' && !isspace (ch)))
		{
			++pszMACAddress;

			if ((ch < '0' || ch > '9') && (ch < 'a' || ch > 'f'))
			{
				return NULL;
			}

			iNumber <<= 4;
			iNumber += isdigit (ch) ? (ch - '0') : (ch - 'a' + 10);
			ch = *pszMACAddress;

			if (iConunter < 5 && ch != cSep)
			{
				return NULL;
			}
		}
		/* Store result.  */
		pbyAddress[iConunter] = (unsigned char) iNumber;
		/* Skip cSep.  */
		++pszMACAddress;
	}
	return pbyAddress;
}
C++
/*
	This function converts Mac Address in Bytes to String format.
	It does not validate any string size and pointers.

	It returns MAC address in string format.
*/

char *ConvertMacAddressInBytesToString(char *pszMACAddress, 
				unsigned char *pbyMacAddressInBytes)
{
	sprintf(pszMACAddress, "%02x%c%02x%c%02x%c%02x%c%02x%c%02x", 
						pbyMacAddressInBytes[0] & 0xff,
						cSep,
						pbyMacAddressInBytes[1]& 0xff, 
						cSep,
						pbyMacAddressInBytes[2]& 0xff, 
						cSep,
						pbyMacAddressInBytes[3]& 0xff, 
						cSep,
						pbyMacAddressInBytes[4]& 0xff, 
						cSep,
						pbyMacAddressInBytes[5]& 0xff);

	return pszMACAddress;
} 

History

  • 8th April, 2009: Initial post

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


Written By
Software Developer (Senior) Juniper Networks
India India
I started my programming with DOS. Now I am flying on C# sky.

Comments and Discussions

 
GeneralCan anyone please explain "iNumber += isdigit (ch) ? (ch - '0') : (ch - 'a' + 10);" ? Pin
Member 1468233918-Dec-19 0:34
Member 1468233918-Dec-19 0:34 
GeneralMy vote of 5 Pin
Aparna_Anand1-Jul-10 20:45
Aparna_Anand1-Jul-10 20:45 
GeneralSimpler implementation Pin
Damien Dube28-Apr-10 5:38
Damien Dube28-Apr-10 5:38 
GeneralMy vote of 1 Pin
barto9-Apr-09 2:44
barto9-Apr-09 2:44 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.