Carácter de escape de C ++: resuelve el molesto encabezado del protocolo y finaliza el problema hexadecimal

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

Caracteres de escape comunes y códigos ASCII correspondientes
\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:

  1. 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.
  2. 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.

Supongo que te gusta

Origin blog.csdn.net/gkzscs/article/details/83658760
Recomendado
Clasificación