首页 > 解决方案 > sscanf 进入 uint8 数组失败

问题描述

我正在使用 sscanf 将字符串中的 MAC 地址放入 uint8 数组中。出于某种原因, uint8 数组都是空白的。

#include <iostream>
#include <string.h>
using namespace std;

int main()
{
    std::string mac = "00:00:00:00:00:00";
    uint8_t smac[7];
    memset(smac, 0, 7);
    sscanf(
        mac.c_str(), 
        "%hhu:%hhu:%hhu:%hhu:%hhu:%hhu",
        &smac[0],
        &smac[1],
        &smac[2],
        &smac[3],
        &smac[4],
        &smac[5]
    );

    std::cout << "string: " << mac << std::endl;
    std::cout << "uint8_t: "<< smac;

    return 0;
}

标签: c++

解决方案


uint8_t在大多数平台上都是typedeffor unsigned char。因此,cout尝试将其打印为字符串,但遇到空字节(或字符串终止符)作为第一个字符,因此停止打印。

这里的解决方案是单独打印所有 MAC 地址成员:

for(int c = 0; c < sizeof(smac); c++)
{
    std::cout << +smac[c];
    if(c != sizeof(smac) - 1)
        std::cout << "::";
}
std::cout << '\n';

这里+执行整数提升,因此smac[c]将打印为数字而不是字符。


推荐阅读