Directorio de artículos
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 QByteArray
una variable de tipo data
.
La segunda línea indica que data
el 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] << 8
es 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 = 16234
consistente 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.