【发布时间】:2016-07-05 06:33:57
【问题描述】:
我正在尝试通过这种方式将带符号的十六进制数转换为 WORD、DWORD 和 QWORD:
#include <stdio.h>
#include <stdlib.h>
#include <inttypes.h>
int main(void) {
printf("WORD=%d\n", (int16_t) strtol("F123", NULL, 16));
printf("DWORD=%d\n", (int32_t) strtol("FFFFF123", NULL, 16));
printf("QWORD=%lld\n", (int64_t) strtol("FFFFFFFFFFFFF123", NULL, 16));
return 0;
}
但它返回以下内容:
WORD=-3805
DWORD=2147483647
QWORD=2147483647
但是为什么 DWORD 和 QWORD 转换也没有返回 -3805?
我的意思是:存储在 DWORD 中的 0xFFFFF123 将包含十进制的 -3805 值,而不是 2147483647
预期输出:
WORD=-3805
DWORD=-3805
QWORD=-3805
您有按位选择吗?
【问题讨论】:
-
对于 WORD 和 DWORD 大小写,您必须使用
"%d"而不是"%ld" -
没有按预期工作?预期结果是什么?
-
我猜整个 printf 为 -3805...
-
我已经编辑了这个问题。存储在 DWORD 中的
0xFFFFF123将包含十进制的-3805值,而不是2147483647。