news 2026/5/30 22:02:23

C 语言格式符最全速查:%d %u %c %hhu %hu %x %hx %hhx 一次看懂

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
C 语言格式符最全速查:%d %u %c %hhu %hu %x %hx %hhx 一次看懂

日期:2025-12-17

标签:C语言, printf, 格式符, 调试技巧, 内存打印


前言
printf是 C 入门第一课,但%d%u%hx%hhu这些“长度修饰符”一旦组合起来,很多人就开始晕。

本文用一张表 + 一段代码帮你把常用格式符全部梳理清楚,再也不怕打印错类型导致 UB(未定义行为)。


一、一眼速查表

格式 实际类型 位宽 取值范围 常见用途 典型写法
%dsigned int 32 b −2.1 G … +2.1 G 有符号十进制int x; printf("%d\n", x);
%uunsigned int 32 b 0 … 4.3 G 无符号十进制unsigned y; printf("%u\n", y);
%cchar / int 8 b 0 … 255 输出字符char c='A'; printf("%c\n", c);
%hhuunsigned char 8 b 0 … 255 单字节无符号unsigned char b=200; printf("%hhu\n", b);
%huunsigned short 16 b 0 … 65 535 半字无符号unsigned short s=50 000; printf("%hu\n", s);
%xunsigned int 32 b 0 … 0xFFFFFFFF 32 位十六进制unsigned n; printf("%08x\n", n);
%hxunsigned short 16 b 0 … 0xFFFF 16 位十六进制unsigned short s; printf("%04hx\n", s);
%hhxunsigned char 8 b 0 … 0xFF 8 位十六进制unsigned char b; printf("%02hhx\n", b);

口诀:“h 短、hh 更短,无修饰就是 int。”


二、长度修饰符到底干嘛?
C 的整型提升规则把char/short先变成int再进栈,

长度修饰符告诉printf“从提升后的 int 里取多少位”:

修饰符 含义
hh只取最低 1 字节(unsigned char
h只取最低 2 字节(unsigned short
无 取 4 字节(unsigned int
l取 8 字节(unsigned long
ll取 8 字节(unsigned long long
z对应size_t(32/64 位自适应)


三、代码实战:内存 dump 模板

#include<stdio.h>intmain(void){unsignedcharbuf[]={0x1A,0x2B,0x3C,0xFD,0xEA};/* 1. 单字节十六进制 */for(size_ti=0;i<sizeof(buf);++i)printf("%02hhx ",buf[i]);/* 1a 2b 3c fd ea */putchar('\n');/* 2. 一次性拼串再打印 */charhex[sizeof(buf)*2+1];for(size_ti=0;i<sizeof(buf);++i)sprintf(hex+i*2,"%02hhX",buf[i]);puts(hex);/* 1A2B3CFDEA */return0;}

四、易踩的坑

  1. char%d打印

    char默认带符号,值0xFF会输出-1;想看到255请用%hhu

  2. %xunsigned char

    实参 1 字节,printf期望 4 字节 → UB;正确写法%02hhx

  3. 64 位平台打印size_t

    %zu,别写%u%lu

  4. Windows 打印__int64

    老 MSVC 用%I64d/%I64u,而不是%lld


五、小结

  • 看到hh就想到 1 字节十六进制;
  • 看到h就想到 2 字节十六进制;
  • 其余默认按 4 字节处理。

记住这张表,调试内存、写协议、刷算法题都能秒写格式串!


版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/30 8:17:23

python中模型加速训练accelerate包的用法

文章目录介绍应用示例适配训练环境快速启动分布式训练推理时的显存优化优势介绍 accelerate 最核心的价值是简化大模型训练 / 推理的硬件适配&#xff0c;它抽象了不同硬件&#xff08;单卡、多卡、CPU、TPU、GPU 混合精度&#xff09;的底层差异&#xff0c;让你用一套代码就…

作者头像 李华
网站建设 2026/5/28 17:29:23

科技发展的ai

科技发展的双重赋能与治理困境&#xff1a;在创新与平衡中探寻可持续路径摘要科技发展作为人类文明进步的核心驱动力&#xff0c;在重塑经济结构、优化生活方式、破解全球难题等方面展现出颠覆性力量。从智能手机普及到人工智能赋能产业升级&#xff0c;从绿色技术革新到跨领域…

作者头像 李华
网站建设 2026/5/28 12:26:58

Java基础阶段练手项目清单

Java基础阶段练手项目清单这份清单覆盖语法应用、逻辑训练、简单数据处理等核心能力&#xff0c;适合刚学完基础语法的新手&#xff0c;无需框架&#xff0c;只用JDK即可完成。1. 控制台计算器- 核心需求&#xff1a;实现加、减、乘、除、取余运算&#xff0c;支持输入两个数字…

作者头像 李华
网站建设 2026/5/30 22:23:07

30、Linux系统操作与资源指南

Linux系统操作与资源指南 1. info工具的操作 info工具是Linux系统中常用的帮助工具,其相关文件存放在 /usr/share/info 目录下。在info工具中,有一些常用的组合键操作,如下表所示: | 组合键 | 操作 | | — | — | | 空格键、PageDown | 向下滚动到下一页 | | 退格键…

作者头像 李华
网站建设 2026/5/30 21:05:06

9.有人网络转RS485模块的使用

可能是水平问题&#xff0c;个人不太喜欢用QT的串口类&#xff0c;进行开发&#xff0c;宁可转一下。有人的网络转RS485&#xff0c;比较喜欢用。这里记录一下&#xff0c;使用方法&#xff1a;设置成服务端&#xff1a;然后&#xff0c;保存重启即可。此时模块就变成一个网络转…

作者头像 李华
网站建设 2026/5/28 19:51:14

HSWeb框架企业级权限管理系统终极指南:从入门到精通

HSWeb框架企业级权限管理系统终极指南&#xff1a;从入门到精通 【免费下载链接】hsweb-framework hsweb (haʊs wɛb) 是一个基于spring-boot 2.x开发 ,首个使用全响应式编程的企业级后台管理系统基础项目。 项目地址: https://gitcode.com/gh_mirrors/hs/hsweb-framework …

作者头像 李华