You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
78 lines
2.2 KiB
C#
78 lines
2.2 KiB
C#
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;
|
|
}
|
|
}
|
|
}
|