把Mac地址字符串轉換為占一個字節的十六進制數(用指針函數返回值)
#include <stdio.h> #include <stdlib.h> #include <string.h> unsigned char *getMac() { char n[6][5]; char mac[20]="80:32:C0:AF:55:AB"; sscanf(mac,"%[^:]:%[^:]:%[^:]:%[^:]:%[^:]:%[^:]",n[0],n[1],n[2],n[3],n[4],n[5]); int i, j; int m[2]; static unsigned char data[6]={0}; //需要定義成靜態變量,避免隨函數周期結束而收回達不到傳遞返回值的效果。靜態變量定義后不會隨着函數生命周期結束,而是進程生命周期結束而結束(相對於全局變量) for(i=0;i<6;i++) { for(j=0;j<2;j++) { if(n[i][j]=='0') m[j]=0; else if(n[i][j]=='1') m[j]=1; else if(n[i][j]=='2') m[j]=2; else if(n[i][j]=='3') m[j]=3; else if(n[i][j]=='4') m[j]=4; else if(n[i][j]=='5') m[j]=5; else if(n[i][j]=='6') m[j]=6; else if(n[i][j]=='7') m[j]=7; else if(n[i][j]=='8') m[j]=8; else if(n[i][j]=='9') m[j]=9; else if((n[i][j]=='a') || (n[i][j]=='A')) m[j]=10; else if((n[i][j]=='b') || (n[i][j]=='B')) m[j]=11; else if((n[i][j]=='c') || (n[i][j]=='C')) m[j]=12; else if((n[i][j]=='d') || (n[i][j]=='D')) m[j]=13; else if((n[i][j]=='e') || (n[i][j]=='E')) m[j]=14; else if((n[i][j]=='f') || (n[i][j]=='F')) m[j]=15; printf("m[%d]=%d\n",j,m[j]); } data[i] = m[0]<<4 | m[1]; }
printf("0x%x\n0x%x\n0x%x\n0x%x\n0x%x\n0x%x\n",data[0],data[1],data[2],data[3],data[4],data[5]); return data; } int main() { unsigned char *str = getMac(); printf("0x%x\t0x%x\t0x%x\t0x%x\t0x%x\t0x%x\n",str[0],str[1],str[2],str[3],str[4],str[5]); return 0; }
把Mac地址字符串轉換為占一個字節的十六進制數(地址參)
#include <stdio.h> #include <stdlib.h> #include <string.h> void getMac(unsigned char *data) { char n[6][2]; char mac[20]="80:32:C0:AF:55:AB"; sscanf(mac,"%[^:]:%[^:]:%[^:]:%[^:]:%[^:]:%[^:]",n[0],n[1],n[2],n[3],n[4],n[5]); int i, j; int m[2]; for(i=0;i<6;i++) { for(j=0;j<2;j++) { if(n[i][j]=='0') m[j]=0; else if(n[i][j]=='1') m[j]=1; else if(n[i][j]=='2') m[j]=2; else if(n[i][j]=='3') m[j]=3; else if(n[i][j]=='4') m[j]=4; else if(n[i][j]=='5') m[j]=5; else if(n[i][j]=='6') m[j]=6; else if(n[i][j]=='7') m[j]=7; else if(n[i][j]=='8') m[j]=8; else if(n[i][j]=='9') m[j]=9; else if((n[i][j]=='a') || (n[i][j]=='A')) m[j]=10; else if((n[i][j]=='b') || (n[i][j]=='B')) m[j]=11; else if((n[i][j]=='c') || (n[i][j]=='C')) m[j]=12; else if((n[i][j]=='d') || (n[i][j]=='D')) m[j]=13; else if((n[i][j]=='e') || (n[i][j]=='E')) m[j]=14; else if((n[i][j]=='f') || (n[i][j]=='F')) m[j]=15; } *(data+i) = m[0]<<4 | m[1]; }
printf("0x%x\t0x%x\t0x%x\t0x%x\t0x%x\t0x%x\n",*data,*(data+1),*(data+2),*(data+3),*(data+4),*(data+5)); } int main() { unsigned char data[10]; getMac(data); printf("0x%x\t0x%x\t0x%x\t0x%x\t0x%x\t0x%x\n",data[0],data[1],data[2],data[3],data[4],data[5]); return 0; }