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

C语言int转short后printf打印十六进制出现4字节结果问题咨询

问题根因
  • C语言的可变参数函数(比如printf)存在默认参数提升规则:所有长度小于int的整数类型(包括short、char)在传参时,都会被自动转换为int类型再传入函数。
  • 绝大多数编译器默认short为有符号类型,你代码里的53191十六进制为0xcfc7,对应16位有符号数的最高位为1,属于负数。当有符号的short提升为32位int时会触发符号扩展,高位全部补1,最终得到的int值为0xffffcfc7。
  • %x格式符默认对应参数类型为unsigned int,会直接读取完整的32位值按十六进制打印,所以最终输出4字节长度的结果。
修复方案

你可以任选以下任意一种方案得到2字节的十六进制输出:

  • 使用专门匹配short类型的格式符%hx,明确告知printf按短整型解析参数:
    printf("s = %hx",s); // 输出结果为cfc7
    
  • 打印时将参数强制转换为unsigned short,避免符号扩展:
    printf("s = %x", (unsigned short)s); // 输出结果为cfc7
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 13:24:04