SSCANF 进入 uint8 阵列失败

sscanf into uint8 array fails

本文关键字:失败 阵列 uint8 进入 SSCANF      更新时间:2023-10-16

我正在使用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;
}

uint8_t在大多数平台上都是unsigned chartypedef。因此,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]将打印为数字而不是字符。

uint8_tunsigned char的类型通常等同于编译器。 输出char数组(无符号或无符号(的约定是在达到零值时停止,因为这表示字符串的结束。