C++ C++;将字节二进制值强制转换为字符串

C++ C++;将字节二进制值强制转换为字符串,c++,C++,如何将表示MAC地址的6个字节转换为以冒号分隔的十六进制值显示地址的字符串 谢谢 确保它以null结尾 您需要知道字符串的编码方式。如果它是ASCII,一个简单的std::string str((char*)您的缓冲区)就可以了。_缓冲区应该是一个无符号字符。如果不是,我们需要更多的信息 不确定你的意思是“强制转换”还是“转换”。如果转换,则取决于您想要它的形式。你可能需要十六进制,基数64,八进制 如果你想要十六进制,考虑函数,它可以做各种排序和分组。 如果您想要BASE-64,请考虑./P>

如何将表示MAC地址的6个字节转换为以冒号分隔的十六进制值显示地址的字符串

谢谢

  • 确保它以null结尾
  • 您需要知道字符串的编码方式。如果它是ASCII,一个简单的std::string str((char*)您的缓冲区)就可以了。_缓冲区应该是一个无符号字符。如果不是,我们需要更多的信息

  • 不确定你的意思是“强制转换”还是“转换”。如果转换,则取决于您想要它的形式。你可能需要十六进制,基数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并添加了这个,它工作得很好。