为什么通过命令行参数传递时字符串中的十六进制不会转换为十六进制?

And*_*sne 4 c string hex argv

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

char * ptr = "\x41\x42" ;
printf( "%s\n" , ptr ) // AB
Run Code Online (Sandbox Code Playgroud)

\x被丢弃并被41编译器视为十六进制.

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

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

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

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

谢谢你的时间.

Bar*_*ter 5

它在源代码中工作,因为编译器(预处理器)进行替换.当你的程序在黑暗中单独工作时,没有编译器来帮助进行那种替换.

所以,如果你需要像编译器那样解析它 - 自己动手.