C&C++   发布时间:2022-04-03  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了c – 打印由16位分割的64位十六进制数据的最简单方法大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我想以下列格式打印64位十六进制数据:

0x1111_2222_3333_4444

我可以想到以下几点:

#define FIRST_MASK  0xFFFF000000000000
#define SECOND_MASK 0x0000FFFF00000000
#define THIRD_MASK  0x00000000FFFF0000
#define FOURTH_MASK 0x000000000000FFFF

val = 0x1111222233334444 
printf("0x%04x_%04x_%04x_%04x\n",\
       (unsigned int)((val & FIRST_MASK)  >> 48),(unsigned int)((val & SECOND_MASK) >> 32),(unsigned int)((val & THIRD_MASK)  >> 16),(unsigned int)(val & FOURTH_MASK)
);

是否有简单(或可能更干净)的方法来实现这一目标?

解决方法

位移始终是最好的方法,因为它们既快速又独立于平台.但是,你的代码是不必要的复杂:你可以在移动之后而不是之前屏蔽.

#include <stdint.h>
#include <stdio.h>

int main (void)
{
  uint64_t val = 0x1111222233334444;
  printf("0x%04x_%04x_%04x_%04x\n",(unsigned int)(val>>48 & 0xFFFF),(unsigned int)(val>>32 & 0xFFFF),(unsigned int)(val>>16 & 0xFFFF),(unsigned int)(val>> 0 & 0xFFFF) );
}

大佬总结

以上是大佬教程为你收集整理的c – 打印由16位分割的64位十六进制数据的最简单方法全部内容,希望文章能够帮你解决c – 打印由16位分割的64位十六进制数据的最简单方法所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。