Я обычно использую указатели следующим образом
char *ptr = malloc( sizeof(char) * 100 ); memset( ptr, 0, 100 ) ; strncpy( ptr, "cat" , 100 - 1 );
Но на этот раз вместо того, чтобы использовать "кошку", я хочу использовать его ASCII, эквивалентный в шестнадцатеричном числе.
кошка = 0x63, 0x61, 0x74, 0x00
Я попробовал
strncpy( ptr, "0x630x61" , 100 - 1 );
Но это перестало работать как ожидалось.
Каков правильный синтаксис?
Я должен поместить 0x00 также? На мгновение позволяет, забывают о memset
, теперь я должен поместить 0x00? Поскольку в нотации "кошки", пустой указатель автоматически помещается.
С уважением
\ xXX
- это синтаксис для вставки символов в шестнадцатеричном формате. так что ваш будет:
strncpy( ptr, "\x63\x61\x74", 100 - 1);
Вам не нужно вставлять \ x00
, поскольку кавычки автоматически ограничивают строку нулем.
strncpy( ptr, "\x63\x61" , 100 - 1 );
0x63
- целочисленный шестнадцатеричный литерал; Компилятор C анализирует его как таковой в коде. Но внутри строки он интерпретируется как последовательность символов 0, x, 6,3
.
Литерал для char
со значением 63 hex. это '\ x63'
, и внутри строк вы должны использовать это обозначение.
"c \ x63"
- литерал для с нулевым завершением ] строка, независимо от символов в кавычках (или обозначения, которым вы их обозначаете), поэтому нет, вам не нужно добавлять конечный ноль вручную.
Обратите внимание, вам нужно только \ внутри строки ""
char cat[4];
cat[0] = 0x63;
cat[1] = 0x61;
cat[2] = 0x74;
car[3] = 0x00;
char cat[] = "\x63\x61\x74"; // note the \0 is added for you
char cat[] = { 0x63, 0x61, 0x74, 0x00 };
Все одинаковые