bmt*_*033 3 c# bytearray bitconverter
我正在开发一个C#WinForms应用程序,用于向/从硬件设备读取/写入数据.我的应用程序有一个多选列表框,其中包含数字1 - 100000,用户最多可以选择10个数字.当他们完成选择每个数字时,用户单击一个按钮,我的事件处理程序代码需要构建一个固定大小(30字节)的字节数组,使用3个字节来表示每个选定的数字,如果少于10个数字则填充数组选择.
例如,假设我的用户选择以下值:
17
99152
3064
52588
65536
Run Code Online (Sandbox Code Playgroud)
我目前正在使用此代码将每个数字转换为字节数组:
byte[] bytes = BitConverter.GetBytes(selectedNumber);
Array.Reverse(bytes) // because BitConverter.IsLittleEndian() = true
Debug.WriteLine(BitConverter.ToString(bytes));
Run Code Online (Sandbox Code Playgroud)
对于上面列出的数字,这会产生以下结果:
00-00-00-11
00-01-83-50
00-00-0B-F8
00-00-CD-6C
00-01-00-00
Run Code Online (Sandbox Code Playgroud)
BitConverter给了我一个4字节的数组,我只有空间使用3个字节来存储最后一个字节数组中的每个数字.我可以删除每个单独字节数组中最重要的字节,然后像这样构建我的最终数组:
00-00-11-01-83-50-00-0B-F8-00-CD-6C-01-00-00-[padding here]
Run Code Online (Sandbox Code Playgroud)
将其写入设备应该有效.但是从设备读取数组(或类似的数组)会给我带来一些问题.当我有一个3字节的数组并尝试使用此代码将其转换为int ...
int i = BitConverter.ToInt32(bytes, 0);
Run Code Online (Sandbox Code Playgroud)
...我得到"目标数组不够长,无法复制集合中的所有项目." 我想我可以在每三个字节的开头插入一个0x00的最高有效字节,然后转换它,但是有更好的方法吗?
我会想象位移,|操作员应该是最有效的方法.
int i = (bytes[2] << 0) | (bytes[1] << 8) | (bytes[0] << 16);
另外,作为抬头,您将丢弃最重要的字节,而不是最不重要的字节; p
| 归档时间: |
|
| 查看次数: |
4993 次 |
| 最近记录: |