С# BIG Endian Format для длинного значения

Я пытаюсь сделать следующее относительно моей спецификации:

Счетчик продаж с количеством байтов N начинается с байта 0 в формате BIG ENDIAN, хранящемся как представление с дополнением до двух ("со знаком"). N соответствует количеству байтов, необходимых для кодирования счетчика продаж. Должен быть не менее 5 байт / 40 бит для счетчика доходов.

и для этого я создал следующий код на С#

private static byte[] EncodeUmsatz(long umsatz)
{
    // This gives an 8-byte array
    byte[] umsatzBytes = BitConverter.GetBytes(umsatz);
    // Pad with zeroes to get 16 bytes
    int length = 16 * ((umsatzBytes.Length + 15) / 16);
    Array.Resize(ref umsatzBytes, length);
    // reverse to get big-endian array
    Array.Reverse(umsatzBytes, 0, umsatzBytes.Length);
    return umsatzBytes;
}

Свойство IsLittleEndian BitConverter ложно. Так должно быть, или?

Но тест с внешним инструментом говорит

«Рассчитанный счетчик продаж не соответствует зашифрованному счетчику продаж (см. параметр DECRYPTED_TURNOVER_VALUE), проверьте кодировку счетчика продаж (BIG endian, дополнение до двух) или используемый ключ AES».

Что я не знаю, делает ли мой код представление с дополнением до двух?

Я не специалист по байтам, так что у кого-нибудь есть идея, что я могу попробовать


person user11105229    schedule 23.02.2019    source источник


Ответы (1)


поэтому проблема решена - код С# верен для прямого порядка байтов - проблема заключалась в том, что значение входного параметра было неверным

person user11105229    schedule 23.02.2019