我正在开发一个与通过USB连接的设备进行通信的程序。当我的程序读入从设备发送的数据(例如按下按钮)时,它将作为字节数组发送。我将键值对存储为按钮按下字节数组的字典和按钮名称的字符串,只要按下它就会显示。该设备还有滑块,可以发送字节数组,但它有一个完整的范围,每个滑块都是数组中的不同数字
{ 3, 0, 0, 0, FF, 0, 0, 0 }
范围从00到FF以十六进制表示,我转换为十进制。
byte[] slider1rangeLower = { 3, 0, 0, 0, 00, 0, 0, 0 }
byte[] slider1rangeUpper = { 3, 0, 0, 0, 255, 0, 0, 0 }
byte[] slider2rangeLower = { 3, 0, 0, 00, 0, 0, 0, 0 }
byte[] slider2rangeUpper = { 3, 0, 0, 255, 0, 0, 0, 0 }
我需要知道正在使用什么滑块,因此0-255之间的每个值都来自" slider1"或者无论名称是什么。有没有办法为一个对象存储整个范围的值,而不是每个滑块创建256个条目?
答案 0 :(得分:0)
C#是一种面向对象的语言,我会为设备创建一个具有所有属性的对象。由于我对设备了解不多,所以我不得不猜测很多,但这是我想出来的,应该可以轻松扩展到你需要使用它的地方。
public class MyDevice
{
private const int PayloadIdByte = 0;
private const int PayloadSliderId = 3;
private const int PayloadButtonId = 4;
private const int Button1Byte = 1;
private const int Button2Byte = 2;
private const int Button3Byte = 3;
private const int Slider1Byte = 4;
private const int Slider2Byte = 3;
private const int PayloadSize = 8;
public bool Button1 { get; set; }
public bool Button2 { get; set; }
public bool Button3 { get; set; }
public byte Slider1 { get; set; }
public byte Slider2 { get; set; }
public MyDevice()
{
}
public void Update(byte[] payload)
{
if (payload.Length != PayloadSize)
throw new ArgumentException("payload");
if (payload[PayloadIdByte] == PayloadSliderId)
{
Slider1 = payload[Slider1Byte];
Slider2 = payload[Slider2Byte];
}
if (payload[PayloadIdByte] == PayloadButtonId)
{
Button1 = payload[Button1Byte] > 0;
Button2 = payload[Button2Byte] > 0;
Button3 = payload[Button3Byte] > 0;
}
}
}
您可以在更新对象,附加功能等时添加事件。当您从USB读取新的有效负载时,只需将其传递给Update函数,然后让该函数将有效负载解析为对象。