[Visual Studio] Qt recibe los datos enviados por el puerto serie y utiliza la operación OR bit a bit para combinar dos datos de 8 bits en un entero de 16 bits

pregunta

El libro continúa desde la última vez.Antes, desensamblé los datos en 8 bits, los guardé en una matriz de bytes y los transmití. Esta vez, desarrollé el entorno Qt basado en Visual Studio, lo recibí con el lenguaje C++ y luego lo volví a fusionar.

En cuanto al desmontaje, lo hice en el entorno IDE de Arduino. Para obtener más información, consulte el artículo: [Arduino] Al transmitir datos en serie, use AND bit a bit y desplazamiento a la derecha para descomponer los datos en 8 bits, guárdelos en matrices de bytes antes de transmitir, incluido el código y el análisis .

Método

Combinar la matriz de bytes de acuerdo con la posición adecuada

Primero cargue el código central

QByteArray data = m_SerialPort.read(2);
int Channel1 = (data[1] << 8) | data[0];

La primera línea significa leer 2 bytes de datos del puerto serie y almacenarlos en QByteArrayuna variable de tipo data.

La segunda línea indica que datael segundo byte de datos de la variable se deja desplazado 8 bits, combinado con el primer byte de datos, y el valor obtenido se asigna a la variable Channel1.

Operación OR bit a bit suplementaria

En una operación OR bit a bit, el resultado de cada bit está determinado por la operación OR lógica de los bits correspondientes de los dos operandos.

Las reglas son:

  • El bit de resultado es 1 si al menos uno de los bits correspondientes de los dos operandos es 1;
  • De lo contrario, el bit de resultado es 0.

Por ejemplo, considere la operación OR bit a bit de los siguientes dos números binarios:

1 0 1 0 1 0 1 1 (171)
1 1 0 0 1 1 0 0 (204)
|
1 1 1 0 1 1 1 1 (239)

Por ejemplo

Por ejemplo, cuando los datos que se van a transmitir son 16234, lo que realmente se transmite es data = data[0] data[1] = 01101010 00111111, en cuanto a por qué este es el caso, también consulte el artículo: [Arduino] Al transmitir datos en serie, use AND bit a bit y desplazamiento a la derecha para desensamblar los datos en 8 bits, guárdelos en matrices de bytes y luego transmítalos, incluidos los códigos y el análisis .

primer byte data[0] = 01101010.
segundo byte data[1] = 00111111.
El resultado de la operación data[1] << 8es 00111111 00000000. Operación
OR bit a bit , se produce el siguiente proceso de operación|

0 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 (16128)
|
0 1 1 0 1 0 1 0 (106)
0 0 1 1 1 1 1 1 0 1 1 0 1 0 1 0 (16234)

Se puede ver que el resultado final es Channel1 = 16234consistente con el resultado de datos que queremos transmitir.

Resumir

Anteriormente, los datos se descomponían en 8 bits para su transmisión mediante operaciones AND bit a bit y desplazamiento a la derecha. Aquí usamos OR bit a bit y operaciones de desplazamiento a la izquierda para recombinar los datos transmitidos y obtener el valor real que queremos transmitir.

Supongo que te gusta

Origin blog.csdn.net/weixin_36815313/article/details/131408372
Recomendado
Clasificación