Concludiamo il discorso intrapreso nello scorso appuntamento: mappare correttamente i byte provenienti da PLC. Se vi siete persi lo scorso articolo lo potete leggere qui.
Siamo arrivati all’implementazione del codice:
public class PLCByteConverter {
public static byte[] GetBytes(int value)
{
byte[] output;
output = BitConverter.GetBytes(value);
return new byte[] { output[3], output[2], output[1], output[0] };
}
public static int ToInt(byte[] input)
{
int output;
output = BitConverter.ToInt32(new byte[] { input[3], input[2], input[1], input[0] }, 0);
return output;
}
public static byte[] GetBytes(short value)
{
byte[] output;
output = BitConverter.GetBytes(value);
return new byte[] { output[1], output[0] };
}
public static short ToShort(byte[] input)
{
short output;
output = BitConverter.ToInt16(new byte[] { input[1], input[0] }, 0);
return output;
}
public static byte[] GetBytes(bool value)
{
if (value) return BitConverter.GetBytes((short)1);
else return GetBytes((short)0);
}
public static bool ToBoolean(byte[] input)
{
return (input[0] == 1);
}
public static byte[] GetBytes(String value)
{
return Encoding.ASCII.GetBytes(value);
}
public static String ToString(byte[] input)
{
return Encoding.ASCII.GetString(input);
}
public static byte[] GetBytes(float value)
{
byte[] output = BitConverter.GetBytes(value);
return new byte[] { output[3], output[2], output[1], output[0] };
}
public static float ToFloat(byte[] input)
{
return BitConverter.ToSingle(new byte[] { input[3], input[2], input[1], input[0] }, 0);
}
}
Alcune precisazioni sono dovute. Nel codice C# sarebbe possibile anche utilizzare il metodo Reverse() della classe System.Collections.Generic.List, invece di creare manualmente i byte in ordine inverso.
Fatemi sapere se ci sono domande, Buon Lavoro!
Nessun commento:
Posta un commento