如何将表示MAC地址的6个字节转换为以冒号分隔的十六进制值显示地址的字符串?
由于
答案 0 :(得分:4)
您可能希望将六个字节的序列格式化为:
aa:bb:cc:dd:ee:ff
其中aa
是以十六进制格式化的第一个字节。
这样的事情应该做:
char MAC[6]; //< I am assuming this has real content
std::ostringstream ss;
for (int i=0; i<6; ++i) {
if (i != 0) ss << ':';
ss.width(2); //< Use two chars for each byte
ss.fill('0'); //< Fill up with '0' if the number is only one hexadecimal digit
ss << std::hex << (int)(MAC[i]);
}
return ss.str();
如果您非常希望以类似强制转换的方式执行此操作(从此处的标题中猜测),您可以创建一个MAC类,为它实现ostream-operator(如我给定的代码)并使用{{1} }。
答案 1 :(得分:3)
不确定你的意思是演员还是转换。如果转换,那么它取决于你想要的形式。你可能想要Hex,base-64,octal,......
如果你想要十六进制,请考虑STLSoft的format_bytes()
函数,它可以进行各种排序和分组。
如果您想要base-64,请考虑b64 library。
HTH
[编辑]与OP上的编辑一致,完整的impl将是:
#include <stlsoft/conversion/byte_format_functions.hpp>
#include <stdio.h>
int main()
{
unsigned char mac[6];
char result[STLSOFT_NUM_ELEMENTS(mac) * 3];
stlsoft::format_bytes(mac, sizeof(mac), &result[0], STLSOFT_NUM_ELEMENTS(result), 1, ":");
puts(result);
return 0;
}
在这种情况下不需要来检查format_bytes()
的返回值,因为你传入了足够的写缓冲区。在实际案例中,您需要检查
答案 2 :(得分:1)