C++ C++;将字节二进制值强制转换为字符串
如何将表示MAC地址的6个字节转换为以冒号分隔的十六进制值显示地址的字符串 谢谢C++ C++;将字节二进制值强制转换为字符串,c++,C++,如何将表示MAC地址的6个字节转换为以冒号分隔的十六进制值显示地址的字符串 谢谢 确保它以null结尾 您需要知道字符串的编码方式。如果它是ASCII,一个简单的std::string str((char*)您的缓冲区)就可以了。_缓冲区应该是一个无符号字符。如果不是,我们需要更多的信息 不确定你的意思是“强制转换”还是“转换”。如果转换,则取决于您想要它的形式。你可能需要十六进制,基数64,八进制 如果你想要十六进制,考虑函数,它可以做各种排序和分组。 如果您想要BASE-64,请考虑./P>
不确定你的意思是“强制转换”还是“转换”。如果转换,则取决于您想要它的形式。你可能需要十六进制,基数64,八进制
如果你想要十六进制,考虑函数,它可以做各种排序和分组。
如果您想要BASE-64,请考虑./P> 嗯
[编辑]根据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;
}
#包括
#包括
int main()
{
无符号字符mac[6];
字符结果[STLSOFT_NUM_ELEMENTS(mac)*3];
stlsoft::格式化字节(mac,sizeof(mac),&result[0],stlsoft\u NUM\u元素(result),1,“:”;
放置(结果);
返回0;
}
在这种情况下,不需要检查
format_bytes()
的返回值,因为您传递了足够的写入缓冲区。在实际情况下,您可能希望检查您可能希望六个字节的序列的格式如下:
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();
charmac[6];//<我想这是真的
std::ostringstream ss;
对于(int i=0;i在结果字符串中需要什么?需要字节的文本表示(例如十六进制)还是要将6个字节实际解释为ASCII(或其他编码)?我希望得到文本表示,所以是十六进制。或者是48位数字?如果是,它是什么编码,以及它的尾端是什么?请改进您的问题。我们不是读心术的人-提供的信息越多,响应越好。如果不是以null结尾,您可以使用std::string的assign()方法,该方法可选地接受两个附加参数,即起始位置和字符数,例如std::string str;str.assign(reinterpret_cast(buf),0,6);输入是网络SNMP库提供给我的一个6字节的二进制值,我需要的是它返回的十六进制值,因为它是MAC地址。我在你的问题中添加了这个信息,因为你根本不清楚这是你想要做的。看起来你是第一个做到的:)我已经有了一个cast.h并添加了这个,它工作得很好。