如何有效打印Mac地址(C语言)
1、示例
c#include <stdio.h> #include <stdlib.h> static int hex2num(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; return -1; } void hexstr2mac(char *dst, char *src) { int i=0; while(i<6) { if(' ' == *src||':'== *src||'"'== *src||'\''== *src) { src++; continue; } *(dst+i) = ((hex2num(*src)<<4)|hex2num(*(src+1))); i++; src += 2; } } //使用 char mac[6]={0}; char* macstr="AA:BB:CC:DD:EE:FF"; hexstr2mac(&mac,macstr); printf("Mac:%02X:%02X:%02X:%02X:%02X:%02X\n", mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]); // 其打印结果的0x后面会出现很多FFF
C// 打印示例,如: DstMAC:00:FFFFFFF4:FFFFFF8D:FFFFFFB4:FFFFFFF3:FFFFFFE1 SrcMAC:00:0C:29:49:FFFFFFAF:FFFFFFBA
MAC[i]应该是被定义成了 char了,char是有符号的,完整的类型名是signed char。
若是printf("%.2X:",MAC[i]),传参时会将MAC[i] 扩展成int再传
若MAC[i]是0x50, 则被扩展成0x00000050
若是0x86, 因为符号位是1,带符号扩展则变成0xFFFFFF86所以要&0xff, 去掉高位0xFFFFFF
2、方法一
C// 定义mac[6]时,使用unsigned char定义 unsigned char mac[6] = {0};
3、方法二
shell// 打印时mac[i]后面加&0xFF printf("Mac:%02X:%02X:%02X:%02X:%02X:%02X\n", mac[0]&0xFF, mac[1]&0xFF, mac[2]&0xFF, mac[3]&0xFF, mac[4]&0xFF, mac[5])&0xFF;
C// 使用上述两种方法,打印示例如下: DstMAC:00:F4:8D:B4:F3:E1 SrcMAC:00:0C:29:49:AF:BA