据我所知,十六进制数字可以放入字符串使用\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]是一个十六进制字符串如何可以转换为十六进制数字(没有解析,就像在第一个例子中所做的那样)?
谢谢你的时间.