Как назначить значение символу char *, используя шестнадцатеричную нотацию?

Обычно я использую указатели следующим образом

     char * ptr = malloc (sizeof (char) * 100);
     memset (ptr, 0, 100);
     strncpy (ptr, «cat», 100 - 1);

Но на этот раз вместо использования «cat», я хочу использовать его ASCII-эквивалент в шестнадцатеричном формате.

cat = 0x63, 0x61, 0x74, 0x00

Я старался

     strncpy (ptr, "0x630x61", 100 - 1);

Но он терпит неудачу, как ожидалось.

Каков правильный синтаксис?

Нужно ли мне также поставить 0x00? На мгновение забываем о memset , теперь мне нужно поставить 0x00? Потому что в нотации «cat» нуль автоматически помещается.

С уважением

\xXX – это синтаксис для вставки символов в шестнадцатеричном формате. так что ваши будут:

 strncpy( ptr, "\x63\x61\x74", 100 - 1); 

Вам не нужно вставлять \x00 поскольку с помощью котировок автоматически null-ограничивает строку.

Обратите внимание: вам нужно только \ внутри строки “”

 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 }; 

Все равно

 strncpy( ptr, "\x63\x61" , 100 - 1 ); 

0x63 – целочисленный шестнадцатеричный литерал; Компилятор C анализирует его как таковой в коде. Но внутри строки она интерпретируется как последовательность символов 0,x,6,3 . Литерал для char с шестнадцатеричным значением 63. is '\x63' , и внутри строк вы должны использовать это обозначение. "c\x63" является литералом для строки с нулевым завершением , независимо от символов внутри кавычек (или обозначений, посредством которых вы их обозначили), поэтому нет, вам не нужно добавлять конечный ноль вручную.