Motorola数据解析及赋值
Motorola格式转换
字节顺序: Byte0, Byte1, … Byte7
bit位顺序: bit7, bit6, … bit0
Motorola LSB

Motorola MSB

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
| ulong Motorola_Get(byte[] data, int startbit, int bitlength, bool msb = true) { ulong longData = 0; data.ToList().ForEach(b => longData = (longData << 8) + b); int move = move ? data.Length * 8 - (8 - startbit % 8 - 1 + (startbit / 8) * 8) - bitlength : (data.Length - 1 - (startbit / 8)) * 8 + startbit % 8; ulong mask = (ulong)Math.Pow(2, bitlength) - 1; longData >>= move; longData &= mask; return longData; }
void Motorola_Set(byte[] data, double values, int startbit, int bitlength, double factor, double offset, bool msb = true) { ulong dataSet = Convert.ToUInt64((values - offset) / factor); ulong longData = 0; data.ToList().ForEach(b => longData = (longData << 8) + b); int move = move ? data.Length * 8 - (8 - startbit % 8 - 1 + (startbit / 8) * 8) - bitlength : (data.Length - 1 - (startbit / 8)) * 8 + startbit % 8; ulong mask = (ulong)Math.Pow(2, bitlength) - 1; longData = longData & ~(mask << move) | ((dataSet & mask) << move); for (int i = 0; i < data.Length; i++) { data[7 - i] = (byte)(longData >> i * 8); } }
|