据我所知,可以使用\x
将十六进制数放入字符串中。例如0x41 0x42
可以作为"\x41\x42"
放在字符串中。
char * ptr = "\x41\x42" ;
printf( "%s\n" , ptr ) // AB
\x
被丢弃,编译器将其视为十六进制。但如果我通过命令行参数将其传递给我的程序,它将不起作用。
// test.c
main( int argc , char * argv[] )
{
printf( "%s\n" , argv[1] ) ;
}
$gcc-o程序测试.c
$./prog“\x41\x42”
\x41\x42
$.prog\x41\x42
\x41 \x42
我所期望的是例1中的
41
。为什么会这样?为什么这种表示方法在命令行参数的情况下不起作用?
如何才能将
AB
中的值转换为十六进制数(与第一个示例一样,不进行解析)?谢谢你的时间。
最佳答案
\ X41是值为41(十六进制)的字节的内部C表示。当您编译这个程序时,在二进制文件中它将是41h(只有1个字节,而不是x41)。
当您从命令行传递\x41时,它将被视为4个字符的字符串,因此您可以看到所看到的内容。