mac地址的输出格式(C ++,stringstream)

时间:2011-01-03 19:36:27

标签: c++ string format stringstream

我找到了代码:

static void PrintMACaddress(unsigned char MACData[])
{
    printf("MAC Address: %02X-%02X-%02X-%02X-%02X-%02X\n", 
        MACData[0], MACData[1], MACData[2], MACData[3], MACData[4], MACData[5]);
}

此功能打印像00-53-45-00-00-00

这样的MAC地址

我的问题:

如何在打印到std::stringstream时制作此类格式?

更新

谢谢大家的建议!

我不知道为什么,但是一些没有static_cast<unsigned int>的解决方案给了我像☻-0→-0M-0Ы-0m-0╜这样的奇怪字符所以我选择 icecrime {/ 3}}:

void PrintMACaddressWithBoostFormat(unsigned char MACData[])
{
    boost::format fmt("%02X-%02X-%02X-%02X-%02X-%02X");

    for (int i = 0; i != 6; ++i)
    {
        fmt % static_cast<unsigned int>(MACData[i]);
    }

    std::stringstream valStream(fmt.str().c_str());

    //testing
    std::cout << "Boost version: " << valStream.str().c_str() << std::endl;
}

Palmik boost version也很棒;)

谢谢!

4 个答案:

答案 0 :(得分:5)

也许有点偏离主题,但我会亲自使用Boost.Format

boost::format fmt("%02X-%02X-%02X-%02X-%02X-%02X");
for (int i = 0; i != 6; ++i)
    fmt % static_cast<unsigned int>(MACData[i]);
std::cout << fmt << std::endl;

答案 1 :(得分:3)

你可以这样做(不改变应用程序的现有设计(我想你不能,否则你可能会这样做:))

void printMacToStream(std::ostream& os, unsigned char MACData[])
{
    // Possibly add length assertion
    char oldFill = os.fill('0');

    os << std::setw(2) << std::hex << static_cast<unsigned int>(MACData[0]);
    for (uint i = 1; i < 6; ++i) {
        os << '-' << std::setw(2) << std::hex << static_cast<unsigned int>(MACData[i]);
    }

    os.fill(oldFill);

    // Possibly add:
    // os << std::endl;
}

用法:

std::stringstream ss;
printMacToStream(ss, arrayWIthMACData);

更新:HEX格式:)

答案 2 :(得分:1)

char prev = stream.fill('0');  // save current fill character

for(int i=0; i<5; i++)
  stream << setw(2) << MACData[i] << '-';
stream << setw(2) << MACData[5];

stream.fill(prev);  // restore fill character

答案 3 :(得分:1)

首先,您应该将代码转换为使用C ++流和操纵器,例如

std::cout << std::hex << std::setw(2) << std::setfill('0') << MACData[0] ...

然后你应该为<<运算符重载左侧的流和右侧的类。