Что я понимаю, что шестнадцатеричные числа могут быть помещены в строку, используя \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]
, которое мы точно знаем, что шестнадцатеричная строка может быть преобразована в шестнадцатеричное число (без разбора, как в первом примере)?
Спасибо, что уделили время.