SSCANF 进入 uint8 阵列失败
sscanf into uint8 array fails
我正在使用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 char
的typedef
。因此,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_t
和unsigned char
的类型通常等同于编译器。 输出char
数组(无符号或无符号(的约定是在达到零值时停止,因为这表示字符串的结束。
相关文章:
- 如果没有malloc,链表实现将失败
- 模板参数替换失败,并且未完成隐式转换
- 具有默认模板参数的多态类的模板推导失败
- OpenMP阵列性能较差
- 视图中的参数推导失败:take_while
- 链接到自行创建的dll失败
- 带有特殊路径部分的"std::filesystem::weakly_canonical"失败
- GetShortPathName在网络驱动器上使用中文文件夹时失败
- gcc和c++17的过载解析失败
- 为什么使用 P/Invoke 调用 dll 时,某些计算机中的 LoadLibrary 失败?
- 在WSL:configure_file上对config_file的每次调用都失败:配置文件时出现问题
- 如何将三维尺寸不固定的三维阵列展平为一维阵列
- 当我的阵列太大时出现分段错误
- 使用 GCC 卸载的 OpenMP 卸载失败,并出现"Ptx assembly aborted due to errors"
- 使用cmake从源代码构建MySQL连接器/C++失败(与以前的声明冲突)
- 链接阶段在Ubuntu上失败,但在MacOS上失败
- 从父数组测试用例构造二叉树失败
- SSCANF 进入 uint8 阵列失败
- 2D阵列试图填充时失败
- Pinvoke阵列编组失败