我有一个List<byte>
,其中包含从串行端口接收到的变量的字节。变量的类型可以变化,我们只知道变量的大小(以字节为单位)。
List<byte> data = new List<byte>();
byteList.Add(0x12); //test values
byteList.Add(0x34);
byteList.Add(0x56);
byteList.Add(0x78);
byteList.Add(0x9a);
问题1:当我们不知道哪种类型,并且在运行时将了解其大小时,哪种类型最适合用于变量?现在,我以最大可能的大小声明了该变量。我应该将其声明为对象吗?
public UInt64 value;
第二季度:什么是将相应字节从List
复制到此变量的最佳和最快方法?现在,我尝试逐字节地移动它们,但对我来说似乎不是一个好方法。所以我想使用BitConverter
,但它是用于数组而不是列表。
示例1
:when varSize = 2;
然后
myVar should get 0x1234 as the value and (Uint16) as the type
示例2:
when varSize = 4;
然后
myVar should get 0x12345678 as the value and (Uint32) as the type
编辑: 这是一个数据记录器应用程序。用户给我外部存储器中变量的地址和大小,我的应用程序从外部设备读取该存储器。然后,用户可以选择如何查看该变量,他/她可以希望将其查看为整数,浮点数或双精度数等。但这始终是数字。
答案 0 :(得分:2)
您可以使用BitConverter。可以在调用ToArray()时使用该列表
https://docs.microsoft.com/en-us/dotnet/api/system.bitconverter?view=netframework-4.7.2
使用这些功能,您可以解析长度为1、2、4和8的数字,包括整数,有符号/无符号和浮点数。