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

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

    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? Поскольку в нотации "кошки", пустой указатель автоматически помещается.

С уважением

9
задан Andrew-Dufresne 10 March 2010 в 21:55
поделиться

3 ответа

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

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

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

16
ответ дан 4 December 2019 в 09:36
поделиться
strncpy( ptr, "\x63\x61" , 100 - 1 );

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

2
ответ дан 4 December 2019 в 09:36
поделиться

Обратите внимание, вам нужно только \ внутри строки ""

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

Все одинаковые

4
ответ дан 4 December 2019 в 09:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: