sscanf在从c中的内存指针扫描short int时返回-1?

时间:2016-08-12 13:52:48

标签: c scanf

我正在尝试使用short int从内存指针扫描sscanf(16位/ 2字节),如下所示。但它显示出一些奇怪的行为。

#include <stdio.h>
#include <errno.h>

int main()
{
    unsigned char p[] = {0x00, 0x1A};
    short int s = 0;
    int ret = sscanf(p,"%hu",&s);
    printf("Actual data %02x %02x\n",p[0],p[1]);
    printf("s = %hu ret = %d errno = %d\n",s,ret,errno);
    return 0;
}

输出:

Actual data 00 1a
s = 0 ret = -1 errno = 0

请帮助我理解我做错了什么!

1 个答案:

答案 0 :(得分:2)

p指向0x00个字节,因此它看起来像一个空字符串,因此sscanf无需解析。

看起来只是想将复制这两个字节 verbatim 复制到short,而不是将C字符串转换为short?如果是这样,那么您可以使用memcpy来代替sscanf电话:

memcpy(&s, p, sizeof(s));

请注意,这假设您的缓冲区和目标short具有相同的字节顺序。如果没有,那么你还需要处理字节顺序。