c++ - 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;
}
解决方案
uint8_t
在大多数平台上都是typedef
for 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]
将打印为数字而不是字符。
推荐阅读
- mysql - 数据库复制在更新时非常慢
- ruby-on-rails - 如何模拟谷歌oauth的失败?
- c# - 两个列表中的非重叠日期时间
- c# - 如何通过正则表达式获取前缀、值和指数
- java - 1个视图android布局上的2个属性
- javascript - 谷歌地图中的 Javascript for 循环
- javascript - 如何访问 JSON 属性?
- android - 可以在 Proguard 崩溃报告中添加一个变量(Google Play ANR & Blocks)
- jquery - 无法在 DataTables 网格中包装 ASP.NET MVC 表
- javascript - 内联 javascript:了解什么是内联,什么不是更好的 CSP