我正在开发一个从硬件设备读取/写入数据的 C# WinForms 应用程序。我的应用程序有一个多选列表框,其中包含数字 1 - 100000,用户最多可以选择 10 个数字。当他们选择完每个数字后,用户单击一个按钮,我的事件处理程序代码需要使用 3 个字节来构建一个固定大小(30 个字节)的字节数组来表示每个选定的数字,如果少于 10 个数字则填充数组选择。
例如,假设我的用户选择以下值:
17
99152
3064
52588
65536
我目前正在使用此代码将每个数字转换为字节数组:
byte[] bytes = BitConverter.GetBytes(selectedNumber);
Array.Reverse(bytes) // because BitConverter.IsLittleEndian() = true
Debug.WriteLine(BitConverter.ToString(bytes));
对于我上面列出的数字,这会产生以下结果:
00-00-00-11
00-01-83-50
00-00-0B-F8
00-00-CD-6C
00-01-00-00
BitConverter 给了我一个 4 字节数组,我只有空间可以使用 3 个字节将每个数字存储在最终字节数组中。我可以删除每个单独字节数组的最高有效字节,然后像这样构建我的最终数组:
00-00-11-01-83-50-00-0B-F8-00-CD-6C-01-00-00-[padding here]
将其写入设备应该可以工作。但是从设备中读取数组(或类似数组)给我带来了一些问题。当我有一个 3 字节数组并尝试使用此代码将其转换为 int 时...
int i = BitConverter.ToInt32(bytes, 0);
...我得到“目标数组不够长,无法复制集合中的所有项目。” 我想我可以在每三个字节的开头插入一个 0x00 的最重要字节,然后进行转换,但是有没有更好的方法来做到这一点?