从字节列表构建新变量

时间:2018-11-15 11:06:18

标签: c# arrays list types type-conversion

我正在尝试编写数据记录器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;
};

可能的变量类型为byteuint8int8uint16int16uint32int32,{ {1}},uint64int64floatdoublechar

1 个答案:

答案 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;
}

我找不到动态选择类型的方法,因此我必须一个接一个地进行转换。