Click here to Skip to main content
Click here to Skip to main content

Convert MAC Address String into Bytes

, 8 Apr 2009 CPOL
Rate this:
Please Sign up or sign in to vote.
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. 

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.
*/
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;
}
/*
	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)

Share

About the Author

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

Comments and Discussions

 
GeneralMy vote of 5 PinmemberAparna_Anand1-Jul-10 21:45 
GeneralSimpler implementation PinmemberDamien Dube28-Apr-10 6:38 
GeneralMy vote of 1 Pinmemberbarto9-Apr-09 3:44 

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

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

| Advertise | Privacy | Terms of Use | Mobile
Web04 | 2.8.1411023.1 | Last Updated 8 Apr 2009
Article Copyright 2009 by anand choubey
Everything else Copyright © CodeProject, 1999-2014
Layout: fixed | fluid