Байты 8 бит, а не 4, поэтому ваше смещение отключено. Вы также объявили локальные переменные во второй функции, чтобы в итоге не записать параметры out
, как вы намеревались. Также будет понятнее / лучше, если вы ограничите себя побитовыми операциями (&
, |
и ~
), где это возможно.
static short ToShort(byte byte1, byte byte2)
{
return (short) ((byte2 << 8) | (byte1 << 0));
}
static void FromShort(short number, out byte byte1, out byte byte2)
{
byte2 = (byte) (number >> 8);
byte1 = (byte) (number >> 0);
}
Обратите внимание, что сдвиги влево и вправо на ноль, строго говоря, не нужны. Я просто положил их для симметрии. Кроме того, лично я бы порекомендовал вам просто изучить побитовую арифметику холодных и пропустить написание вспомогательных функций, подобных этим. Не нужно скрывать детали с чем-то таким фундаментальным, ИМХО.