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

ASCII字符数组转十六进制字符数组遇sprintf参数报错如何解决

问题原因
  • sprintf 函数第一个参数要求是指向目标缓冲区的char*类型指针,你传入的buff[0]是char类型的单个字符值,属于整型数据,不是内存地址,因此触发了「整数转指针未做强制转换」的警告。
解决方法

修复当前语法错误

只需要把sprintf的第一个参数改成缓冲区首地址即可,buff或&buff[0]都可以,修改后代码如下:

char string[20]="abcd";
char buff[4000];

sprintf(buff,"%02x",string[0]);

printf("string[0]: %c, 十六进制字符串: 0x%s",string[0], buff); 

完整实现ASCII数组转十六进制初始化格式功能

如果要实现你预期的输出格式(生成char buf[4096] = {0x61, 0x62, ...};样式的字符串),可以参考下面的完整实现:

#include <stdio.h>
#include <string.h>

int main() {
    char string[] = "abcd1234567";
    char buf[4096] = {0};
    int offset = 0;
    int len = strlen(string);
    
    // 先写入前缀
    offset += sprintf(buf + offset, "char buf[4096] = {");
    for (int i = 0; i < len; i++) {
        if (i != 0) {
            offset += sprintf(buf + offset, ", ");
        }
        offset += sprintf(buf + offset, "0x%02x", (unsigned char)string[i]);
    }
    // 写入后缀
    offset += sprintf(buf + offset, "};");
    
    printf("%s\n", buf);
    return 0;
}

运行后输出结果和你预期的格式完全一致。

若需要存十六进制数值而非字符串

如果你的需求不是生成C代码格式的字符串,而是要把ASCII字符对应的十六进制数值直接存到无符号字符数组里,不需要用sprintf,直接赋值即可:

char string[] = "abcd1234567";
unsigned char hex_buf[4096] = {0};
int len = strlen(string);

for (int i = 0; i < len; i++) {
    hex_buf[i] = (unsigned char)string[i];
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 09:45:03