unsigned char mac[6] = {0x50,0x5a,0xc6,0x00,0x34,0xa0};
boost::format fmt("%02X-%02X-%02X-%02X-%02X-%02X");
fmt % +mac[0] % +mac[1] % +mac[2]
% +mac[3] % +mac[4] % +mac[5];
cout << fmt << endl;
上面的代码中 我只是想将数组标识的mac地址转换为字符串形式,但是在初次使用format时出现了百思不得其解的问题;
按照网上大多数大牛们写的代码片段使用,出现的结果是非预期的,出现了乱码;
fmt % mac[0] % mac[1] % mac[2] % mac[3] % mac[4] % mac[5];
其大概原理就是上面的这句代码没有使用医院操作符 “+”,而boost::format 使用的 操作符“%”是不能自动完成char到int的转换;
而为什么printf使用同样的格式串就能正确输出能?
是因为 printf 使用的变长参数列表,对char类型的参数的处理是自动转为int传递的,所以也就能正确处理;
那为什么 使用一元操作符能"+",就能结果正确了呢?
原因是 “+”,可以提升它的操作数类型,使char转换为int
所以浪费很长时间才得到的理解思路,分享出来以供记忆和借鉴