十六进制的Scanf unsigned char

时间:2013-04-22 07:34:36

标签: 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]

2 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:0)

您的代码很好

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]

的值