On Thu, Aug 12, 2010 at 8:15 PM,  <[email protected]> wrote:
> Greetings. Is there any way to accomplish the following using 'unsigned char' 
> instead of 'unsigned int'?

In short, no.

> unsigned int addr[6];
>
> (void) sscanf("01:23:45:67:89:AB", "02X:02X:02X:02X:02X:02X", &addr[5], 
> &addr[4], &addr[3], &addr[2], &addr[1], &addr[0]);
>
> Since the address represented by the string is really 6 bytes I was hoping to 
> convert directly. However, with my current format string sscanf expects the 
> target locations to be unsigned int's. Using unsigned char's for the array 
> expectedly results in a memory error. I could do it manually but if it can be 
> accomplished with an existing function I'd rather use that.
>
> I see a solution here www.codeproject.com/KB/cpp/MACAddressUtility.aspx[1] 
> which suggests to me sscanf will not suit my purposes.

Production code from work parsing the dhcpd leases file:

typedef struct ip_user {
[...]
        unsigned char mac[6];
[...]
};
[...]
int a,b,c,d,e,f,i,j,k,l,ip,indx;
[...]
} else if( sscanf(buffer,"  hardware ethernet
%x:%x:%x:%x:%x:%x",&a,&b,&c,&d,&e,&f) == 6 ){
        user->tmac[0] = a;
        user->tmac[1] = b;
        user->tmac[2] = c;
        user->tmac[3] = d;
        user->tmac[4] = e;
        user->tmac[5] = f;


-- 
PJH

Reply via email to