如何将MAC地址(在数组中)转换为C中的字符串?

如何将int数组中的MAC地址转换为C中的字符串? 例如,我使用以下数组来存储MAC地址:

 int array[6] = {0x00, 0x0d, 0x3f, 0xcd, 0x02, 0x5f}; 

如何将其转换为字符串,如"00:0d:3f:cd:02:5f"

你可以这样做:

 char macStr[18]; int array[6] = {0x00, 0x0d, 0x3f, 0xcd, 0x02, 0x5f}; snprintf(macStr, sizeof(macStr), "%02x:%02x:%02x:%02x:%02x:%02x", array[0], array[1], array[2], array[3], array[4], array[5]); 
 unsigned char array[6] = {0x00, 0x0d, 0x3f, 0xcd, 0x02, 0x5f};//or BYTE char str[19]; sprintf(str, "%02x:%02x:%02x:%02x:%02x:%02x:%02x",array[0], array[1], array[2], array[3], array[4],array[5]); 

首先,您可能希望调整用于存储MAC地址的类型。 在这种情况下,我认为unsigned char更好。 接下来,我建议您创建一个函数来写入MAC地址,这样您就不会在代码中的任何地方复制和粘贴相同的printf()语句,并调整您要编制索引的数组。 (另外,它允许编译器根据函数参数检查您正在使用的类型,以确保它是正确的。)

这里有一个类似于inet_ntoa()的非重入解决方案,以及类似于inet_ntoa()的重入解决方案:

 #include  unsigned char mac[6] = {0x00, 0x0d, 0x3f, 0xcd, 0x02, 0x5f}; char* MACADDR_toString(unsigned char* addr) { static char str[18]; if(addr == NULL) return ""; snprintf(str, sizeof(str), "%02x:%02x:%02x:%02x:%02x:%02x", addr[0], addr[1], addr[2], addr[3], addr[4], addr[5]); return str; } char* MACADDR_toString_r(unsigned char* addr, char* str, size_t size) { if(addr == NULL || str == NULL || size < 18) return NULL; snprintf(str, size, "%02x:%02x:%02x:%02x:%02x:%02x", addr[0], addr[1], addr[2], addr[3], addr[4], addr[5]); return str; } int main(int argc, char* argv[]) { char str[18]; printf("%s\n", MACADDR_toString(mac)); printf("%s\n", MACADDR_toString_r(mac, str, sizeof(str))); return 0; } 

在循环中调用sprintf() ^ _ ^:

 #include  int array[6] = {0x00, 0x0d, 0x3f, 0xcd, 0x02, 0x5f}; void macaddress_str(int a[], char *buf) { int i; for (i = 0; i < 5; i++, buf += 3) sprintf(buf, "%02X:", a[i]); sprintf(buf, "%02X", a[i]); } int main() { char buf[100]; macaddress_str(array, buf); printf("%s\n", buf); return 0; }