gpt4 book ai didi

c - 为什么在通过命令行参数传递时,字符串中的十六进制未转换为十六进制?

转载 作者:太空狗 更新时间:2023-10-29 15:14:29 26 4
gpt4 key购买 nike

据我所知,可以使用 \x 将十六进制数放入字符串中。例如 0x41 0x42 可以作为 "\x41\x42" 放在字符串中。

char * ptr = "\x41\x42" ;
printf( "%s\n" , ptr ) // AB

\x 被丢弃,41 被编译器视为十六进制。

但是如果我通过命令行参数将它传递给我的程序,它就不起作用。

    // test.c
main( int argc , char * argv[] )
{
printf( "%s\n" , argv[1] ) ;
}

$ gcc -o prog test.c
$ ./prog "\x41\x42"
\x41\x42
$ .prog \x41\x42
\x41\x42

我期望的是 AB,就像示例 1 中那样。
为什么会这样?为什么这种表示方法在命令行参数的情况下不起作用?
argv[1] 中我们确定是十六进制字符串的值如何转换为十六进制数字(无需解析,就像第一个示例中所做的那样)?

感谢您的宝贵时间。

最佳答案

它在源代码中确实有效,因为编译器(预处理器)进行了替换。当您的程序在黑暗中单独运行时,没有编译器可以帮助进行此类替换。

因此,如果您需要像编译器那样解析它 - 自己动手吧。

关于c - 为什么在通过命令行参数传递时,字符串中的十六进制未转换为十六进制?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3636317/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com