using System; namespace CompressorXN_Communication.TuMos { public class MsgHelper { public byte[] Data; public MsgHelper(byte[] dat, int offset, int byte_size) { Data = new byte[byte_size]; Array.Copy(dat, offset, Data, 0, byte_size); } public UInt64 GetIntelLsb(int startbit, int lenght) { if (lenght > 64) lenght = 64; UInt64 value = 0; UInt64 mask = 1; for (int i = 0; i < lenght; i++) { if (startbit > Data.Length * 8) break; int pos = startbit / 8; byte bits = (byte)(1 << (startbit % 8)); if ((Data[pos] & bits) != 0) value |= mask; mask <<= 1; startbit++; } return value; } public UInt64 GetMotoralaLsb(int startbit, int lenght) { if (lenght > 64) lenght = 64; UInt64 value = 0; UInt64 mask = 1; for (int i = 0; i < lenght; i++) { if (startbit > Data.Length * 8 || startbit < 0) break; int pos = startbit / 8; byte bits = (byte)(1 << (startbit % 8)); if ((Data[pos] & bits) != 0) value |= mask; mask <<= 1; startbit++; if (bits == 0x80) { startbit -= 16; } } return value; } public UInt64 GetMotoralaMsb(int startbit, int lenght) { if (lenght > 64) lenght = 64; UInt64 value = 0; UInt64 mask = (UInt64)1 << (lenght - 1); for (int i = 0; i < lenght; i++) { if (startbit > Data.Length * 8 || startbit < 0) break; int pos = startbit / 8; byte bits = (byte)(1 << (startbit % 8)); if ((Data[pos] & bits) != 0) value |= mask; mask >>= 1; startbit--; if (bits == 0x01) { startbit += 16; } } return value; } } }