Как присвоить значение char * с использованием шестнадцатеричной записи? - PullRequest
7 голосов
/ 11 марта 2010

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

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

Привет

Ответы [ 3 ]

13 голосов
/ 11 марта 2010

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

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

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

4 голосов
/ 11 марта 2010

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

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

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

2 голосов
/ 11 марта 2010
strncpy( ptr, "\x63\x61" , 100 - 1 );

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...