我正在尝试编写数据记录器GUI。该应用程序通过串行端口接收有关嵌入式软件中定义的变量的信息。
我有一个用于存储这些变量的类。每当在监视窗口中请求新变量时,都会创建此类的新实例。
public class Var_t
{
public string vType; //variable type chosen from a combobox
public string vName; //variable name read from the serial port
public UInt32 vAddr; //variable ram addr read from the serial port
public byte vSize; //variable size read from the serial port
public List<byte> vBuffer; //variable content buffer
};
由于变量的大小和类型是在运行时动态读取的,因此我只是在接收此变量的值的同时填充byte
List
。
我需要一个在传输完成后使用vType
数据类型组合这些字节的类。此类将返回一个字符串,让我在组合框中向用户显示变量值:
public class BuildVariable(List<byte> varBuf, string varType)
{
string ValueStr;
//I tried using BitConverter to combine the bytes into a new object
//but it does not accept any parameter for the type
return ValueStr;
};
可能的变量类型为byte
,uint8
,int8
,uint16
,int16
,uint32
,int32
,{ {1}},uint64
,int64
,float
,double
,char
答案 0 :(得分:0)
这就是我最终得到的:
public static string GetTypedString(Var_t varToDisp)
{
string ValueDisplay;
switch (varToDisp.vType)
{
case "byte":
lock (varToDisp.value)
{
byte temp_byte = varToDisp.vBuffer[0];
ValueDisplay = temp_byte.ToString();
}
break;
case "uint16":
lock (varToDisp.value)
{
UInt16 temp_ui16 = BitConverter.ToUInt16(varToDisp.vBuffer.ToArray<byte>(), 0);
ValueDisplay = temp_ui16.ToString();
}
break;
case "uint32":
lock (varToDisp.value)
{
UInt32 temp_uint32 = BitConverter.ToUInt32(varToDisp.vBuffer.ToArray<byte>(), 0);
ValueDisplay = temp_uint32.ToString();
}
break;
//and so on..
}
return ValueDisplay;
}
我找不到动态选择类型的方法,因此我必须一个接一个地进行转换。