C # БОЛЬШОЙ формат Endian для длинного значения - PullRequest
0 голосов
/ 23 февраля 2019

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

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

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

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),проверьте код счетчика продаж (БОЛЬШОЙ порядковый номер, два дополнения) или используемый ключ AES. "

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

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

1 Ответ

0 голосов
/ 24 февраля 2019

так что проблема решена - код c # является правильным для big endian - проблема заключалась в том, что значение входного параметра было неправильным

...