2009-06-26 216 views
2

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

感谢

+0

你想在结果字符串中做什么?你想要一个字节的文本表示(例如十六进制)还是你想实际将6个字节解释为ASCII(或其他编码)? – Joe 2009-06-26 22:54:35

+0

我正在寻找文本表示,所以是十六进制。 – aHunter 2009-06-26 22:58:15

+0

或者它是一个48位数字?如果是这样,它是什么编码,什么是排序? – patros 2009-06-26 22:58:18

回答

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的运营商为它(像我的代码)并使用boost::lexical_cast

1
  1. 确保它是空值终止
  2. 你需要知道什么编码字符串。如果它是ASCII,一个简单的std :: string STR((字符*)your_buffer ) 会做。 your_buffer应该是一个无符号的字符。如果不是,我们需要更多信息。
3

不确定是否表示转换或转换。如果转换,那么它取决于你想要的形式。你可能想要Hex,base-64,octal,...

如果你想要十六进制,请考虑STLSoftformat_bytes()函数,它可以进行各种排序和分组。

如果您想要base-64,请考虑b64 library

HTH

[编辑]与在OP编辑行,全面实现了一套将是:

#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()检查返回值,因为你传入了足够的写入缓冲区。在实际情况下,你要检查

相关问题