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
相关产品推荐
相关产品推荐

