You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言中无法为uint64_t正确赋值64位值的问题排查

问题原因与解决方案

你的问题出在printf格式符与变量类型不匹配,和编译选项无关:

  • %x格式符对应的是unsigned int(32位),而uint64_t是64位无符号整数。当你把uint64_t类型的变量传入printf的可变参数列表时,由于类型不匹配,会被错误解析,导致高32位被丢弃,输出全0。

修复方案

有两种可靠的修复方式:

方式1:使用标准跨平台格式宏

<stdint.h>提供了专门用于打印固定宽度整数的宏,需要配合<inttypes.h>头文件使用:

/*
C code : Temp.c
*/
#include "stdio.h"
#include <stdint.h>
#include <inttypes.h>  // 必须包含此头文件才能使用PRIx64
int main() {
    uint64_t a64 = 0x100000000UL;
    printf("Size of a64 = %zu.\n", sizeof(a64));  // sizeof返回size_t类型,用%zu更标准
    printf("a64 = %16.16" PRIx64 ". \n", a64);
    return 0;
}

方式2:使用64位整数格式符(仅64位平台有效)

在64位系统中,long unsigned int为64位,可以直接用%lx格式符:

/*
C code : Temp.c
*/
#include "stdio.h"
#include <stdint.h>
int main() {
    uint64_t a64 = 0x100000000UL;
    printf("Size of a64 = %zu.\n", sizeof(a64));
    printf("a64 = %16.16lx. \n", a64);
    return 0;
}

验证输出

修复后运行代码,会得到正确结果:

Size of a64 = 8.
a64 = 0000000010000000.

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 13:52:03