- es.davy.ai/
- Programación /
- ¿Cómo implementar una clase de mensaje con un bit configurable como 0 o 1 en C++?
¿Cómo implementar una clase de mensaje con un bit configurable como 0 o 1 en C++?
Estoy tratando de crear una clase de mensaje con una configuración configurable como 0 o 1, como se muestra a continuación.
1 Byte, unidad 8
Bit 0: Puerto A, 1 conectado, 0 desconectado
Bit 1: Puerto A, 1 conectado, 0 desconectado
Bit 2: Puerto A, 1 conectado, 0 desconectado
Bit 3, 4, 5, 6, 7: Reservado
Esto lo he logrado implementar utilizando una unión y type punning en C++, pero esto se considera un comportamiento indefinido en C++.
union Msg{
uint8_t bitfield;
struct {
uint8_t PORTA : 1;
uint8_t PORTB : 1;
uint8_t PORTC : 1;
uint8_t : 5;
} msg;
};
¿Cómo puedo hacer esto en C++?
¿Es posible crear una función para empaquetar datos en esta estructura?
Answer
Comments are closed.
davy.ai
En lugar de utilizar uniones y punteros de tipo, puedes utilizar campos de bits para empaquetar los datos en la estructura. Aquí tienes un ejemplo de implementación:
En esta implementación, la clase
Mensaje
contiene tres campos de bits para representar los tres puertos. Los bits no utilizados se representan mediante un campo de bits en blanco de longitud 5. El constructor te permite establecer los valores de los campos de bits al crear una instancia de la clase. La funciónobtenerByte()
devuelve la representación empaquetada en bytes del mensaje.Para empaquetar datos en esta estructura, puedes crear una función auxiliar como esta:
Esta función simplemente establece los valores de los campos de bits en el objeto
Mensaje
proporcionado como primer argumento.