据我所知,十六进制数字可以使用\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]
谢谢你的时间。