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

C语言ASCII转十六进制函数转换希伯来字符א输出FFFF的问题咨询

问题核心原因解释
  • 首先你的函数设计仅适用于ASCII字符(编码范围0127),希伯来字符「א」不属于ASCII字符集,在常见编码(如UTF-8、Windows-1255)中占12字节,且每个字节的编码值都大于127,这是问题的前提。
  • 大部分C编译器默认char类型为有符号类型(signed char),取值范围是-128~127。当字节值大于127时,会被识别为负数。
  • sprintf的%X格式化符要求传入的参数为unsigned int类型,你传入char类型参数时会触发整数提升规则:有符号负数提升为int时,高位会补符号位1。%02X仅保证最少输出2位、不足补前导0,不会截断高位,因此符号扩展带来的高位1会全部被输出为F,这就是你得到FFFF结果的核心原因。
  • ASCII字符编码值都在0~127范围内,就算是signed char也是正数,整数提升时高位补0,因此%02X可以正常输出两位十六进制值,比如字符u编码为0x75,提升后高位都是0,最终输出75。
修复方案

修改sprintf行的参数,将chrASCII[i]强制转换为unsigned char,避免符号扩展:

sprintf((char*)chrHex + j, "%02X", (unsigned char)chrASCII[i]);

修改后非ASCII字符的每个字节都会正常输出两位十六进制值,比如UTF-8编码的「א」转换后结果为D790。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 02:36:03