C # парсинг байтов как дополнение 2 от чтения устройства Modbus - PullRequest
0 голосов
/ 11 января 2019

Я читаю байты с устройства Modbus, и мне нужно проанализировать байты в целое число. Я пытаюсь разными способами получить правильное значение, но даже не закрываю цель.

ushort[] sourceBytes = new ushort[] { 0x1, 0x98bb };//from modbus     
int target = 79605;// near this value will be ok, 'cause the value increasing    

//Try One

public static uint ushortTo2Comp(ushort H, ushort L)
{           
    uint result = BitConverter.ToUInt32(
                BitConverter.GetBytes(L).Concat(BitConverter.GetBytes(H)).ToArray(), 0);
    uint b = ~result+1;
    return b;
 }

//Try Two

public static ushort ushortTo2Comp2(ushort Hs, ushort Ls)
{
    ushort H = (ushort)(~Hs + 1);
    ushort L = (ushort)(~Ls + 1);
    return BitConverter.ToUInt16(
                BitConverter.GetBytes(H).Concat(BitConverter.GetBytes(L)).ToArray(), 0);
    }

Другие значения для проверки кода:

 #1 { 0x1, 0x98bb } -> 79605
 #2 { 0x0, 0x1f6 } -> 39009
 #3 { 0x1, 0x0} -> 111127
 #4 { 0x1, 0xb2dd} -> 66035
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...