¿Cómo usar caracteres en cadenas fuera del rango ASCII imprimible?

Estoy tratando de crear una cadena con caracteres fuera del rango imprimible ASCII. Estoy usando un microcontrolador STM32 usando el IDE µVision con el compilador Keil. La documentación permite varias secuencias de escape, incluida una para "código ASCII en hexadecimal". Cuando solo quiero un carácter, no hay problema, pero si quiero poner otros números en la misma cadena después del carácter, empiezo a tener problemas.

Esto funciona.

char myString[10] = "\x06";//(It gives me 0x06,0x00,...,0x00)

esto no (Me da 0x60

char myString[10] = "\x060";//(It gives me 0x60,0x00,...,0x00)

Cuantos más caracteres (0-F) en la misma continuidad se sigan agregando como dígitos hexadecimales del mismo número (incluso arrojará una advertencia de que está fuera de rango si el número es demasiado grande). ¿Hay alguna forma de evitar esto? ¿Podría ser esto un problema del compilador?

Respuestas (2)

Si está preguntando cómo terminar una secuencia de escape hexadecimal cuando le sigue un carácter que es un dígito hexadecimal, aquí hay una manera

"\x06""0"

Utilice dos comillas dobles.

De lo contrario, una secuencia de escape hexadecimal utilizará todos los dígitos hexadecimales consecutivos que siguen.

Cuando inicializa una cadena como esa, está especificando un carácter a la vez. Un carácter solo puede contener un valor entre 0 y 255. Si desea completar más bytes de su cadena, simplemente especifique más caracteres en el inicializador:

char myString[4] = "\x06\x60\x44";

Tenga en cuenta que no se garantiza que los caracteres no especificados se llenen con 0, aunque se colocará un 0 al final de lo que especifique como inicializador:

char string2[8] = "test";

Se inicializarán cinco caracteres, los caracteres 6 a 7 pueden contener basura.

Sería más exacto decir que un literal de cadena especifica uno chara la vez. El OP no dijo qué codificación está usando, pero en algunas codificaciones, puede haber más de una charpor carácter.