我正在尝试通过这种方式将带符号的十六进制数转换为 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
呢?
我的意思是:0xFFFFF123
存储在 DWORD 中将包含-3805
十进制值,而不是2147483647
预期输出:
WORD=-3805
DWORD=-3805
QWORD=-3805
你有按位选择吗?