我正在尝试使用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
请帮助我理解我做错了什么!
答案 0 :(得分:2)
p
指向0x00
个字节,因此它看起来像一个空字符串,因此sscanf
无需解析。
看起来只是想将复制这两个字节 verbatim 复制到short
,而不是将C字符串转换为short
?如果是这样,那么您可以使用memcpy
来代替sscanf
电话:
memcpy(&s, p, sizeof(s));
请注意,这假设您的缓冲区和目标short
具有相同的字节顺序。如果没有,那么你还需要处理字节顺序。