Обычно я использую указатели следующим образом
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"
является литералом для строки с нулевым завершением , независимо от символов внутри кавычек (или обозначений, посредством которых вы их обозначили), поэтому нет, вам не нужно добавлять конечный ноль вручную.