69,382
社区成员
发帖
与我相关
我的任务
分享
char buff[]="00:FF:0A:0C:06:03";
char *p=strtok(buff,":");
while(p!=0)
{
int n;
sscanf(p,"%x",&n);
//保存n
p=strtok(NULL,":");
}
/*
例如我取得一个00:FF:0A:0C:06:03的MAC地址,
我想把它转换成0x00,0xFF,0x0A,0x0C,0x06,0x03的
十六进制,存在数组中,我是为了写ARP包。
*/
#include "stdio.h"
#include "string.h"
#define MAX_LEN 128
static unsigned char SwitchChar(char chStr)
{
if (chStr >= '0' && chStr <= '9')
{
return (chStr - '0');
}
else if (chStr >= 'A' && chStr <= 'F')
{
return (chStr - 'A' + 10);
}
else if (chStr >= 'a' && chStr <= 'f')
{
return (chStr - 'a' + 10);
}
else
{
return 0;
}
}
int main(void)
{
char achSrc[] = "00:FF:0A:0C:06:03";
unsigned char abyDst[MAX_LEN+1] = {0};
char *pchStr = NULL;
int nIdx = 0;
int nTotal = 0;
printf("Src Str: %s\n", achSrc);
pchStr = strtok(achSrc, ":");
while (NULL != pchStr)
{
abyDst[nTotal++] = (SwitchChar(*pchStr) << 4) | SwitchChar(*(pchStr+1));
//保存n
pchStr = strtok(NULL, ":");
}
printf("Dst Str: ");
for (nIdx = 0; nIdx < nTotal; nIdx++)
{
printf("0x%02X:", abyDst[nIdx]);
}
printf("\n");
return 0;
}
#include "stdio.h"
#include "string.h"
#define MAX_LEN 128
static unsigned char SwitchChar(char chStr)
{
if (chStr >= '0' && chStr <= '9')
{
return (chStr - '0');
}
else if (chStr >= 'A' && chStr <= 'f')
{
return (chStr - 'A' + 10);
}
else if (chStr >= 'a' && chStr <= 'f')
{
return (chStr - 'a' + 10);
}
else
{
return 0;
}
}
int main(void)
{
char achSrc[] = "00:FF:0A:0C:06:03";
unsigned char abyDst[MAX_LEN+1] = {0};
char *pchStr = strtok(achSrc, ":");
int nIdx = 0;
int nTotal = 0;
while (NULL != pchStr)
{
abyDst[nTotal++] = (SwitchChar(*pchStr) << 4) | SwitchChar(*(pchStr+1));
//保存n
pchStr = strtok(NULL, ":");
}
for (nIdx = 0; nIdx < nTotal; nIdx++)
{
printf("0x%x:", abyDst[nIdx]);
}
return 0;
}