c - Scanf 十六进制无符号字符

标签 c hex scanf unsigned-char

我正在尝试更改数组中的数据,这是我的代码的一部分:

u_char paket[100];
//here i put some data into array and then trying to change it by user
scanf("%hhx.%hhx.%hhx.%hhx.%hhx.%hhx", &paket[0], &paket[1], &paket[2], &paket[3], &paket[4], &paket[5]);

例如,当我输入 88.88.88.88.88.88 时,它会将 paket[0] - paket[5] 设置为 88,但它也会更改 paket [6], paket[7]paket[8] 为 0。

这怎么可能,请问如何解决?我只需要更改 [0] - [5]

最佳答案

您的代码适用于 C99 及更高版本。据推测,您使用的 C 标准库不支持 C99 中引入的 hh 长度修饰符;可能是 Microsoft C 标准库。

如果你需要支持这个旧的 C 标准库,你将不得不重写你的代码以兼容 C89,例如:

unsigned p[6];

if (scanf("%x.%x.%x.%x.%x.%x", &p[0], &p[1], &p[2], &p[3], &p[4], &p[5]) == 6)
{
    int i;
    for (i = 0; i < 6; i++)
        paket[i] = p[i];
}

关于c - Scanf 十六进制无符号字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16141705/

相关文章:

c - OpenMPI 永远等待

c - 排序结构记录

c - 如何在 C 中的 unsigned char* 变量中存储可表示为 32 个十六进制字符的 16 字节二进制值

C 字符串未运行

带数组的c函数没有返回值

Python 3.1.1 字符串转十六进制

javascript - 压缩字母数字字符,限制为 8 个字节的十六进制字符

c - Sscanf 没有以相同的方式读取相同的行

c - 警告 : incompatible pointer types passing 'char *' to parameter of type 'FILE *' (aka 'struct __sFILE *' )

c - 将 linenoise 库添加到 nixpkgs