乐闻世界logo
搜索文章和话题
如何有效打印Mac地址(C语言)

如何有效打印Mac地址(C语言)

爱糖果的Kitty的头像
爱糖果的Kitty

2024年04月27日 09:28· 阅读 367

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
标签: