如何将CHAR数组存储到字符串MAC ADDRESS

时间:2015-08-31 21:48:39

标签: c arrays string

我有一个返回unsigned char chMAC[6];的函数,这是一个mac地址,我将其打印为

printf("Mac: %x",chMAC[0]);
printf("%x",chMAC[1]);
printf("%x",chMAC[2]);
printf("%x",chMAC[3]);
printf("%x",chMAC[4]);
printf("%x\n",chMAC[5]);

我得到的输出为Mac: B827E82D398E这是实际的mac地址,但现在我需要将该值作为字符串传递给sql参数而我不知道如何,因为我需要在两者之间添加:。例如Mac: B8:27:E8:2D:39:8E

我打赌这很容易,但我还在学习C.

3 个答案:

答案 0 :(得分:3)

你拥有所有的部分,你只需要将它们串成正确的顺序。而不是使用6个单独的printf()语句,将其拉入一个包含所有格式的语句:

printf("Mac: %02X:%02X:%02X:%02X:%02X:%02X\n", 
             chMAC[0], chMAC[1], chMAC[2], chMAC[3], chMAC[4], chMAC[5]);

&#34; 02&#34;在&#34;%02X&#34;如果值<15,格式化语句将设置前导零;大写字母X将字母十六进制数字变成大写字母(这是传递MAC地址时的通常惯例)。

要将结果字符串发送到缓冲区而不是stdout,请使用相同的格式字符串调用sprintf(甚至更好,snprintf)。

char mac_str[24];
snprintf(mac_str, sizeof(mac_str), "Mac: %02X:%02X:%02X:%02X:%02X:%02X\n", 
              chMAC[0], chMAC[1], chMAC[2], chMAC[3], chMAC[4], chMAC[5]);

答案 1 :(得分:3)

您可能希望所有字节都显示为两个字符:

%2x

但前导0而不是空格:

%02x

您可以在一次printf电话

中将所有内容串起来
printf("Mac: %02X:%02X:%02X:%02X:%02X:%02X\n"
       , chMAC[0], chMAC[1], chMAC[2], chMAC[3], chMAC[4], chMAC[5]);

如果您希望文本转到sting缓冲区而不是stdout,请执行以下操作:

char buffer[32];

snprintf(buffer, sizeof(buffer)
        , "Mac: %02X:%02X:%02X:%02X:%02X:%02X\n"
        , chMAC[0], chMAC[1], chMAC[2], chMAC[3], chMAC[4], chMAC[5]);

答案 2 :(得分:0)

为什么所有单独的电话?

newlength = sprintf(mac, '%x:%x:%x:%x:%x:%x\n', chMAC[1], etc....)

您可以在一个printf / sprintf调用中拥有多个%whatever格式字符...