加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 打印由16位分割的64位十六进制数据的最简单方法

发布时间:2020-12-16 10:14:28 所属栏目:百科 来源:网络整理
导读:我想以下列格式打印64位十六进制数据: 0x1111_2222_3333_4444 我可以想到以下几点: #define FIRST_MASK 0xFFFF000000000000#define SECOND_MASK 0x0000FFFF00000000#define THIRD_MASK 0x00000000FFFF0000#define FOURTH_MASK 0x000000000000FFFFval = 0x1
我想以下列格式打印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_%04xn",
       (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_%04xn",(unsigned int)(val>>48 & 0xFFFF),(unsigned int)(val>>32 & 0xFFFF),(unsigned int)(val>>16 & 0xFFFF),(unsigned int)(val>> 0 & 0xFFFF) );
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读