您可以使用BitConverter类将字节数组转换为所需的整数格式。
如果您获得 16 位,请将它们转换为 UInt16。
C# 没有定义字节顺序。这取决于您运行的硬件。Intel 和 AMD 处理器是 little-endian。您可以使用BitConverter.IsLittleEndian了解平台的字节序。如果运行 .NET 的计算机和提供数据的硬件不具有相同的字节序,则必须交换两个字节。
byte[] inputFromHardware = { 126, 42 };
ushort value = BitConverter.ToUInt16( inputFromHardware, index );
15 个(或 16 个?)输入中的哪一个处于活动状态
如果这些位是硬件标志,那么所有 16 位都用于表示某事是合理的。当位用于表示有符号数时,其中一位用于表示正与负。由于硬件提供状态位,因此不应将任何位解释为符号。
如果您想知道特定位是否处于活动状态,您可以使用位掩码和&
运算符。例如,二进制掩码
0000 0000 0000 0100
对应十六进制数
0x0004
要了解右侧第三位是否打开,请使用
bool thirdBitFromRightIsOn = (value & 0x0004 != 0);
更新
如果制造商说值 8000(我假设为十六进制)表示通道 15 处于活动状态,请查看如下:
你的位掩码
1000 0000 0000 0000 (binary)
8 0 0 0 (hex)
根据制造商提供的信息,最左边的位对应于通道 15。
您可以使用该掩码,例如:
bool channel15IsOn = (value & 0x8000 != 0);