当我运行以下代码时,我得到0xABCDABCD.0.1
。我想从 val 获取最后两个字节 01b0
,但输出显示为 1
。我使用以下命令屏蔽最后两个字节: 0x000000000000FFFF
uint64_t val = 0xabcdabcd010001b0;
int main() {
printf("0x%X.%d.%x",(val&0xFFFFFFFF00000000)>>32,
(val&0x00000000FF000000)>>24,(val&0x000000000000FFFF));
return 0;
}
最佳答案
问题在于位掩码的结果是 uint64_t
类型。要正确打印,您需要此代码,online here :
#include <stdio.h>
#include <inttypes.h>
uint64_t val = 0xabcdabcd010001b0;
int main() {
printf("0x%" PRIX64 ".%" PRId64 ".%" PRIx64,
(val&0xFFFFFFFF00000000)>>32,
(val&0x00000000FF000000)>>24,
(val&0x000000000000FFFF));
return 0;
}
请参阅 this page for more formats 上的“std::fprintf 系列函数的格式常量”部分.
关于c - 从 64 位值获取最后两个字节,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53291950/