【问题标题】:Scanf unsigned char in hexScanf 十六进制无符号字符
【发布时间】:2013-04-15 00:51:43
【问题描述】:

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

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]

【问题讨论】:

  • u_char 数组的声明可能会将所有元素初始化为 0。一些在一分钟前删除它的研究员的答案可能是正确的:你可以扫描一个 int aka 4 Bytes/chars on each大端系统上的格式标识符。
  • 啊,我的错,我没有发布完整的代码。在第一行和第二行之间,我将数据加载到该数组中。所以在 scanf 之前这些元素没有设置为 0,问题出在 scanf 上。

标签: c hex scanf unsigned-char


【解决方案1】:

您的代码对于 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];
}

【讨论】:

  • 非常感谢!顺便说一句,无符号 p[6];或无符号字符 p[6]; ?还是没关系?
  • @user2306381:必须是unsigned p[6];,因为%x需要一个指向unsigned的指针,不是指向unsigned char的指针。
【解决方案2】:

你的代码很好

u_char paket[100];
scanf("%hhx.%hhx.%hhx.%hhx.%hhx.%hhx", &paket[0], &paket[1], &paket[2], &paket[3], &paket[4], &paket[5])

不更改paket[6], paket[7] and paket[8] 的值。

【讨论】:

    猜你喜欢
    • 2023-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-11
    • 2013-03-22
    • 2015-01-11
    • 2012-04-08
    • 2011-08-06
    相关资源
    最近更新 更多