¿Cómo asignar un valor a un char * usando notación hexadecimal?

Usualmente uso punteros de la siguiente manera

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

Pero esta vez en lugar de usar “cat”, quiero usarlo en ASCII equivalente en hexadecimal.

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

Lo intenté

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

Pero falla como se esperaba.

¿Cual es la syntax correcta?

¿Necesito poner un 0x00 también? Por un momento, olvidemos memset , ¿ahora necesito poner un 0x00? Porque en la notación “cat”, un nulo se coloca automáticamente.

Saludos

\xXX es la syntax para insertar caracteres en formato hexadecimal. por lo que el tuyo sería:

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

No es necesario poner un \x00 ya que tener comillas automáticamente delimita nulo la cadena.

Nota, solo necesitas \ dentro de la cadena “”

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

Son todos iguales

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

0x63 es un entero hexadecimal literal; El comstackdor de C lo analiza como tal dentro del código. Pero dentro de una cadena se interpreta como una secuencia de caracteres 0,x,6,3 . El literal para el char con valor 63 hex. es '\x63' , y dentro de las cadenas debe usar esta notación. "c\x63" es el literal para una cadena terminada en cero , independientemente de los caracteres dentro de las comillas (o de la notación con la que los denota), por lo que no, no es necesario que agregue un cero final manualmente.