La forma en que se representan los tipos de valor en la memoria depende de la arquitectura (little / big endian, por ejemplo) y de los estándares que cumple.
Ejemplo: El estándar IEEE para aritmética de punto flotante (IEEE 754) es un estándar técnico para el cálculo de punto flotante establecida en 1985.
Desde la perspectiva de un microcontrolador, la forma más sencilla de enviar este tipo de datos es enviarlos en esta representación nativa (en memoria) mediante punteros o uniones.
En el lado de la PC / GUI, es posible que tenga recursos / bibliotecas adicionales que lo ayuden con la secuencia de bytes para escribir conversiones. Sin embargo, si realiza la conversión, debe asegurarse de que utiliza las mismas reglas / estándares.
Permite tomar un entero ´i´ sin signo de 16 bits con el valor asignado de 1000 por ejemplo:
i = 1000
La pequeña representación endiana sería
0xE8 0x03
en la memoria. Entonces, cuando desee enviar este valor como un flujo de bytes en serie, simplemente convierta "i" a "byte" y envíe dos bytes a partir de esa dirección.
Su software GUI podría realizar el lanzamiento en la otra dirección, dado que usa el mismo estándar para la representación de tipo. Si usa big endian, es posible que tenga que intercambiar primero el orden de bytes.
btw: ¿A qué tipo de GUI / idioma te refieres? Por ejemplo, C # / .NET proporciona mecanismos extensos para conversiones de tipo usando la clase BitConverter.
EDIT Como el autor mencionó que usa C #, aquí hay información adicional:
Tenga en cuenta que C # en sí no define la endianidad. La endianness es decidida por el hardware. Sin embargo, la mayoría de las plataformas que usan .NET son LITTLE endian. Si quiere estar seguro, puede verificar la endianness del sistema con el campo ´BitConverter.IsLittleEndian´ para decirle cómo se comportará.
Suponiendo que su microcontrolador utiliza little endian (como todos los controladores de atmel (?), por ejemplo), puede convertir los bytes del ejemplo sin firmar de 16 bits sin firmar utilizando:
UInt16 value = BitConverter.ToUInt16(new byte[] { 0xE8, 0x03 }, 0);
De lo contrario, es posible que primero tenga que revertir el orden de los bytes.