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#

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;
}
}
}