c - 从 64 位值获取最后两个字节

标签 c bit-manipulation

当我运行以下代码时,我得到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/

相关文章:

c - 尝试导入头文件并使用它时 C 中的段错误

c - 结构体首地址

c - 如何在/etc/passwd 中添加、删除编辑用户名

python - 大 numpy 数组中的重复位

c - 如何使用按位运算返回 0?

language-agnostic - 使用位域或按位运算符在字节内移动位

c - 捕获浮点溢出异常

c - 我的 fork fifo c 代码不能正常工作

c - 处理分数乘法中的溢出

java - 将 Char 更改为具有相同位结构的 Short。 (2的补码问题)