如何在C语言中以十六进制字符形式传递命令行参数字符串
解决方案
由于无法修改现有C代码,需要通过shell的转义解析能力,将十六进制形式的字符串转换为实际字节后传入程序,以下是几种可行方式:
1. 跨shell通用:利用printf生成字节序列
printf支持解析十六进制转义序列,可直接生成对应字节并作为参数传递:
./a.out "$(printf '\xfa\xbc\x53\x34\x2c')"
针对你示例中的\x55\x56\x57\x58,执行命令:
./a.out "$(printf '\x55\x56\x57\x58')"
程序会直接输出UVWX,符合预期。
2. Bash/Zsh专属:ANSI-C风格引号
Bash和Zsh支持$'...'语法,可直接解析转义序列,写法更简洁:
./a.out $'\xfa\xbc\x53\x34\x2c'
对应示例的命令为:
./a.out $'\x55\x56\x57\x58'
3. Fish Shell 处理方式
Fish Shell可通过printf或string escape实现:
# 方式1:用printf生成 ./a.out (printf '\xfa\xbc\x53\x34\x2c') # 方式2:用string escape解析 ./a.out (string escape -n '\xfa\xbc\x53\x34\x2c')
注意事项
- 不可打印字符(如
\xfa、\xbc)在终端的显示样式取决于终端模拟器,可能会显示为方块、问号等占位符,但程序已正确接收对应字节。 - 转义序列必须严格遵循
\x后接两位十六进制字符的格式,否则shell无法正确解析。
内容的提问来源于stack exchange,提问作者Mike
相关产品推荐
相关产品推荐

