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

C语言中如何将引号字符串转换为ASCII字节数组?

嘿,这个问题我太熟了!在C语言里把引号包裹的字符串转成ASCII值数组,其实分两种常用场景——编译时直接生成(最便捷,完全匹配你举的例子)和运行时动态转换,下面给你拆解清楚:

一、编译时直接生成(零运行开销,推荐)

直接用字符串初始化(最简单)

其实你可能不知道,char DST1[5] = "12345";和你想要的char DST1[5] = {0x31, 0x32, 0x33, 0x34, 0x35};在内存里是完全一模一样的!编译器会自动把字符串里的每个字符转换成对应的ASCII值存到数组里,不需要你手动写十六进制。如果只是需要数组存储ASCII值,这就是最便捷的方式,省事儿还不容易出错。

如果必须显式写出十六进制初始化列表

要是你因为某种原因(比如代码规范、可读性要求)必须写出0x31这种形式,手动敲太麻烦?可以用个简单的脚本自动生成。比如用Python写两行代码:

input_str = "12345"
print(f"char DST1[{len(input_str)}] = {{ {', '.join(f'0x{ord(c):02X}' for c in input_str)} }};")

运行后直接输出你要的代码,复制粘贴就行,长字符串也能秒处理。

二、运行时动态转换(适合动态获取的字符串)

如果字符串是运行时才拿到的(比如用户输入、从文件读取的内容),那可以用循环遍历每个字符,直接赋值就行——因为char类型本身在ASCII编码系统里就对应着ASCII数值:

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

int main() {
    char ST1[5] = "12345";
    char DST1[5];
    int str_len = strlen(ST1);

    // 逐个字符转换(其实就是直接赋值,因为字符本身就是ASCII值)
    for (int i = 0; i < str_len; i++) {
        // 如果担心char是有符号类型,可转成unsigned char避免符号扩展
        DST1[i] = (unsigned char)ST1[i];
    }

    // 验证输出
    for (int i = 0; i < str_len; i++) {
        printf("0x%02X ", DST1[i]);
    }
    return 0;
}

运行这段代码会输出0x31 0x32 0x33 0x34 0x35 ,完全符合你的需求。

总结一下:编译时优先用字符串直接初始化,省事儿又高效;要显式十六进制就用脚本生成;运行时动态转换就循环赋值,搞定!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 04:17:10