You need to enable JavaScript to run this app. C语言中如何将8字节整数拆分为四个2字节十六进制值
优惠活动
大模型
产品
解决方案
定价
更多

C语言中如何将8字节整数拆分为四个2字节十六进制值

实现思路
  • 核心通过位运算完成2字节段拆分:2字节对应16个二进制位,我们可以通过右移操作把目标段放到数值低16位,再和0xFFFF(16位全1的掩码)做按位与,就能提取出对应段的数值,效率远高于字符串操作。
  • 无需额外写十六进制转十进制的逻辑:拆分出的2字节无符号整数本身存储的就是原始数值,输出时指定不同的格式符就能分别显示十六进制、十进制形式,本质是同一个数值的不同展示方式。
完整示例代码
#include <stdio.h>

int main() {
    unsigned long long input;
    printf("请输入一个非负的8字节整数: ");
    // %llu是unsigned long long类型的专属输入格式符
    scanf("%llu", &input);
    
    // 从高到低拆分4个2字节段
    unsigned short seg_high1 = (input >> 48) & 0xFFFF; // 最高位段:右移48位(16*3)后取低16位
    unsigned short seg_high2 = (input >> 32) & 0xFFFF; // 次高位段:右移32位(16*2)后取低16位
    unsigned short seg_low1 = (input >> 16) & 0xFFFF;  // 次低位段:右移16位(16*1)后取低16位
    unsigned short seg_low2 = input & 0xFFFF;          // 最低位段:直接取低16位
    
    // 结果输出
    printf("\n拆分结果:\n");
    printf("十六进制形式:%04x / %04x / %04x / %04x\n", seg_high1, seg_high2, seg_low1, seg_low2);
    printf("十进制数值:%u / %u / %u / %u\n", seg_high1, seg_high2, seg_low1, seg_low2);
    
    return 0;
}
代码说明
  • 输入变量用unsigned long long类型,刚好占用8字节存储空间,符合非负输入的要求。
  • 输出时用%04x格式符可以直接输出4位补前导零的十六进制结果,用%u格式符输出就是对应段的十进制数值。
  • 如果你需要调整段的顺序,只需要调换输出时四个段变量的顺序即可。
测试效果

输入示例中的最大值18446744073709551615时,输出结果如下:

十六进制形式:ffff / ffff / ffff / ffff
十进制数值:65535 / 65535 / 65535 / 65535

内容的提问来源于stack exchange,提问作者Rabbit_KIm

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.20 17:45:06