我有一个返回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.
答案 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
格式字符...