¿Cómo puedo escribir un byte firmado en un puerto serie en VB?

Necesito poder escribir bytes firmados en un puerto serie usando

Método SerialPort.Write (), excepto que el método solo toma matrices de bytes [] de bytes sin firmar, ¿cómo escribiría un byte firmado en el puerto serie?

Por lo que estoy trabajando, el comando en particular toma valores de -1700 a 1700.

gracias

pesadillas

preguntado el 03 de mayo de 12 a las 17:05

Un byte, firmado o sin firmar, no admite el rango de valores que menciona. Los bytes con signo representan de -127 a 128, mientras que los bytes sin signo representan de 0 a 256. -

Lo siento, dividiré ese valor en dos bytes separados:

1 Respuestas

El canal de comunicación en serie no tiene el concepto de firmado o no firmado, solo un concepto de 1 y 0 en el cable. Es su sistema operativo (y, en última instancia, su arquitectura de CPU) el que asigna un valor numérico a esos 1 y 0, tanto en el lado de envío como en el de recepción.

El rango de valores que indica no se puede representar en un byte (según mi comentario y su respuesta). Debe comprender qué patrón de bits espera el dispositivo receptor para un número determinado (¿está el otro dispositivo Big Endian o Little Endian?), y luego puede enviar una secuencia apropiada de byte[] para representar el número que desea transmitir.

Si ambos dispositivos tienen el mismo endianness, puede configurar una matriz de cortos y luego copiar a una matriz de bytes como esta:

short[] sdata = new short[] { 1, -1 };
byte[] bdata = new byte[sdata.Length * 2];

Buffer.BlockCopy(sdata, 0, bdata, 0, bdata.Length);

Sin embargo, asegúrese de probar un rango de valores. Especialmente si se trata de dispositivos integrados, la codificación numérica puede no ser exactamente igual a la de una PC Intel.

contestado el 03 de mayo de 12 a las 17:05

Gracias por esto Eric, eso me aclara mucho las cosas. Cuando dice prueba de rangos, ¿quiere decir que los valores ingresados ​​están dentro del rango especificado de los dispositivos? - codificación

Me refiero a enviar -1700 desde una aplicación de prueba y asegurarse de que el dispositivo en el otro extremo responda como si tuviera -1700. Repita para 1700 y para 0 y para números de prueba positivos y negativos en el rango -127..128 para asegurarse de que la codificación numérica se comporte como espera. - Eric J.

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.