definición
El carácter de escape es una forma especial de carácter en lenguaje C. Por lo general, los caracteres de escape se utilizan para representar caracteres de control no imprimibles y caracteres con funciones específicas en el juego de caracteres ASCII.
Ejemplo
\un | Campana (BEL) |
\segundo | Retroceso (BS) |
\F | Alimentación de formulario (FF) |
\norte | Salto de línea (LF) |
\ r | Retorno de carro (CR) |
\ t | Lengüeta horizontal (HT) |
\ v | Lengüeta vertical (VT) |
\\ | Barra invertida \ |
\ 0 | Carácter nulo (NULL), a menudo utilizado como final de una cadena |
\ ddd | Cualquier carácter, hasta tres dígitos octales |
\ xhh | Cualquier carácter, hasta dos dígitos hexadecimales |
Escenarios de aplicación
- Protocolo de red
En el protocolo de red, habrá un encabezado de trama y una cola de trama, que se utilizan para definir una trama completa para resolver el fenómeno del pegado de paquetes.
Por ejemplo, el siguiente formato de protocolo simple:
Código de inicio | Longitud de datos | Contenido de datos | Código de verificación | Código final |
0xCD 0xCD | 0x00 0x3D | (Cuerda) | 0xED 0x70 | 0x3A 0x4D |
Si queremos enviar una trama de datos completa a la red, primero necesitamos el contenido de datos apropiado y luego encapsular el contenido de datos: agregar el código de inicio y el código de finalización, calcular la longitud de los datos, verificar el código, solo el formato de la trama cumple con el formato especificado en el protocolo, Solo permite que se envíe.
Sin embargo, muchas veces, encontraremos que no es fácil agregar el código de inicio y el código de finalización al marco (almacenar todos los datos en forma de cadena). ¿Cómo convertir fácilmente un número hexadecimal en una cadena? Hay varios métodos:
- El número hexadecimal de cada byte se convierte secuencialmente en un tipo de carácter y luego se asigna a la posición de índice correspondiente de la cadena de cuadros uno por uno.
- Convierta directamente todo el número hexadecimal en una forma de cadena y luego añádalo a la cadena del marco.
Para el método 1, se puede implementar así:
//存储完整一帧数据
char data[256];
//定义char变量,并以16进制数为其赋值
//添加起始码
char c = 0xCD;
data[0] = c;
data[1] = c;
//添加结束码
c = 0x3A;
data[254] = c;
c = 0x4D;
data[255] = c;
Se puede ver que la asignación de cada dígito requiere 2 líneas de código, lo cual es bastante problemático, especialmente cuando hay muchos de esos números.
Veamos la implementación del Método 2:
//存储完整一帧数据
char data[256];
//定义char *变量,并以字符串为其赋值
//添加起始码
char *str = "\xCD\xCD"; //注意转义字符的使用,\xhh表示十六进制数字
strcpy(data, str);
//添加结束码
str = "\x3A\x4D";
strcpy(data+254, str);
En comparación, se encuentra que el Método 2 es más conciso, legible y fácil de entender que el Método 1.
Cuando hay muchos números para convertir, el uso del Método 2 mejorará significativamente la eficiencia de conversión.