以下代码执行后期望a的值是0x12345678,但是实际执行后a的结果是0x00000078
int num = 0;
sscanf("12 34 56 78","%02X %02X %02X %02X",
(unsigned char*)&num + 3,
(unsigned char*)&num + 2,
(unsigned char*)&num + 1,
(unsigned char*)&num
);
原因是,sscanf函数接收的参数类型是void*,其内部把%X的格式赋值给int了,类似于如下代码:
*((int*)((unsigned char*)&num + 3)) = 0x12;
*((int*)((unsigned char*)&num + 2)) = 0x34;
*((int*)((unsigned char*)&num + 1)) = 0x56;
*((int*)((unsigned char*)&num + 0)) = 0x78;