在做C语言中获取mac的程序,已经获取到了,不过是每一位都是字符数组的元素,
但是想把这个字符串转成表示十六进制的字符数组(就是上面两个字符和在一起,得到下面这种一个十六进制字符的形式)
代码或思路都可以,或者有什么相关的函数,请大家帮忙,谢谢!
在做C语言中获取mac的程序,已经获取到了,不过是每一位都是字符数组的元素,
但是想把这个字符串转成表示十六进制的字符数组(就是上面两个字符和在一起,得到下面这种一个十六进制字符的形式)
代码或思路都可以,或者有什么相关的函数,请大家帮忙,谢谢!
#include<stdio.h>
#include<string.h>
int main()
{
unsigned i,len;
int n=0;
char str[99]="123342abcdAFB1H",str1[99],str2[99]=" ";
sscanf(str,"%[0-9^a-f^A-F]",str1);
len=strlen(str1);
while(strlen(str1)>1)
{
sscanf(str1,"%2s",str2);
if(strlen(str1)!=len)printf(",");
printf("0x%s",str2);
n++;
for(i=0;i<strlen(str1)-2;i++)
{
str1[i]=str1[i+2];
}
str1[strlen(str1)-2]='\0';
}
printf("\nn=%d\n",n);
return 0;
}
或者
#include <stdio.h>
int IsHexChar(char ch)
{
if((ch>='0' && ch<='9') || (ch>='a' && ch<='f') ||(ch>='A' && ch<='F'))
return 1;
else
return 0;
}
unsigned char CharToValue(char c)
{
if(c>='0' && c<='9')
{
return c-'0';
}
if(c>='A' && c<='F')
{
return c-'A'+10;
}
if(c>='a' && c<='f')
{
return c-'a'+10;
}
}
unsigned char TwoCharToByte(char h,char l)
{
return (unsigned char)(CharToValue(h)*16 + CharToValue(l));
}
int main()
{
char str[1000] = "123342abcdAFB1H";
unsigned char data[100];
int cnt = 0;
int i;
printf("input str:\n");
//gets(str);
i = 0;
while(str[i]&&str[i+1])
{
if(IsHexChar(str[i]) && IsHexChar(str[i+1]))
{
data[cnt] = TwoCharToByte(str[i],str[i+1]);
cnt++;
//printf(cnt==1?"0x%c%c":", 0x%c%c", str[i], str[i+1]);
i++;
i++;
}
else
break;
}
for(i=0;i<cnt;i++)
{
printf(i==0?"%x":", %x", data[i]);
}
printf("\ncnt = %d\n", cnt);
return 0;
}