private long S(long x, byte i)
{
byte[] bts = new byte[4];
bts = BitConverter.GetBytes(x);
return SBoxes[i, bts[3-i]];
}
Проблема в чем: С# выдает {3, 169, 95, 79, 0, 0, 0, 0}, а ява {3, -87, 95, 79, 0,0,0,0}. Понятное дело что нет в массиве такого числа. Кто знает как эту проблему решить?
private long S(long x, byte i)
{
byte[] bts = new byte[4];
bts = BitConverter.GetBytes(x);
return SBoxes[i, bts[3-i]];
}
Проблема в чем: С# выдает {3, 169, 95, 79, 0, 0, 0, 0}, а ява {3, -87, 95, 79, 0,0,0,0}. Понятное дело что нет в массиве такого числа. Кто знает как эту проблему решить?
число 169 и -87 в двоичном представлении (и в шестнадцатеричном) в первом байте одно и тоже (169 = 0x000000A9; -87 = 0xFFFFFFA9), отличается только знаком. Скорее всего вся проблема в том что элементы твоего массива размером больше чем 1 байт, поэтому при чтении пакета и работы с однобайтовыми элементами, добавляются FF. И если я не ошибаюсь, особо это не влияет на работу с пакетами. И мой тебе совет, просматривай числа в шестнадцатеричном режиме =)
число 169 и -87 в двоичном представлении (и в шестнадцатеричном) в первом байте одно и тоже (169 = 0x000000A9; -87 = 0xFFFFFFA9), отличается только знаком. Скорее всего вся проблема в том что элементы твоего массива размером больше чем 1 байт, поэтому при чтении пакета и работы с однобайтовыми элементами, добавляются FF. И если я не ошибаюсь, особо это не влияет на работу с пакетами. И мой тебе совет, просматривай числа в шестнадцатеричном режиме =)
Проблема в том что реализация немного разная. Байт в C# 0..255, а в java -128..127. И еще один здоровенный гемор, то что порядок следования байт в C# {3, 169, 95, 79, 0, 0, 0, 0}, а в java {0,0,0,0, 79, 95, -87, 3}. И помоему это значительно портит мне жизнь). Походу в делфи тоже порядок {3, 169, 95, 79, 0, 0, 0, 0} и байт 0..255.