求一个m字符串mac地址转换成十六进制的函数

oolhyzcx 2010-05-21 11:18:24
例如我取得一个00:FF:0A:0C:06:03的MAC地址,我想把它转换成0x00,0xFF,0x0A,0x0C,0x06,0x03的十六进制,存在数组中,我是为了写ARP包。
...全文
820 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
oolhyzcx 2010-05-21
  • 打赏
  • 举报
回复
最后能存在一个如m[]的数组中,m[]{0x00,0x01,0x02,0x03,0x04,0x05}这种格式
oolhyzcx 2010-05-21
  • 打赏
  • 举报
回复
有错误
c.c:15: error: `n' undeclared (first use in this function)
白云飘飘飘 2010-05-21
  • 打赏
  • 举报
回复
	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,":");
}
ljz888666555 2010-05-21
  • 打赏
  • 举报
回复
CString str(_T("00:FF:0A:0C:06:03"));
str.Replace(_T(":"),_T(",0x"));
oolhyzcx 2010-05-21
  • 打赏
  • 举报
回复
十分急,在线等……
oolhyzcx 2010-05-21
  • 打赏
  • 举报
回复
对,用拼接函数可以实现
白云飘飘飘 2010-05-21
  • 打赏
  • 举报
回复
char buff[]="00:FF:0A:0C:06:03";
char *p=strtok(buff,":");
char out[10]="0x";
while(p!=0)
{

int n;
sscanf(p,"%x",&n);
strcat(out,p);
printf("%s\n",out);
out[2]=0;
p=strtok(NULL,":");
}
白云飘飘飘 2010-05-21
  • 打赏
  • 举报
回复
char buff[]="00:FF:0A:0C:06:03";
char *p=strtok(buff,":");
char out[10]="0x";
while(p!=0)
{

int n;
sscanf(p,"%x",&n);
strcat(out,p);
printf("%s\n",out);
p=strtok(NULL,":");
}
oolhyzcx 2010-05-21
  • 打赏
  • 举报
回复
不正确啊,输出来的都不对
赵4老师 2010-05-21
  • 打赏
  • 举报
回复
char achSrc[] = "00:FF:0A:0C:06:03";
unsigned char abyDst[6];
sscanf(achSrc,"%02x:%02x:%02x:%02x:%02x:%02x",&abyDst[0],&abyDst[1],&abyDst[2],&abyDst[3],&abyDst[4],&abyDst[5])
oolhyzcx 2010-05-21
  • 打赏
  • 举报
回复
我现在数组中已经是存的00 FF 0A 0C 06 03这种形式,就是不会在前面加0x,转换成0x00的形式
oolhyzcx 2010-05-21
  • 打赏
  • 举报
回复
输出0x00的形式没用,关键是在数组中存的就是0x00的形式,上面那位大虾的功能我都实现了,去掉了:,并且可以用 printf("0x%x:", m[i]);输出0x00的形式
jernymy 2010-05-21
  • 打赏
  • 举报
回复

/*
例如我取得一个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;
}

jernymy 2010-05-21
  • 打赏
  • 举报
回复


#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;
}

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧