<PackageReference Include="SSH.NET" Version="2016.1.0" />

Pack

static class Pack
Provides convenience methods for conversion to and from both Big Endian and Little Endian.
namespace Renci.SshNet.Common { internal static class Pack { internal static ushort LittleEndianToUInt16(byte[] buffer) { return (ushort)(buffer[0] | (ushort)(buffer[1] << 8)); } internal static uint LittleEndianToUInt32(byte[] buffer, int offset) { return (uint)(buffer[offset] | (buffer[offset + 1] << 8) | (buffer[offset + 2] << 16) | (buffer[offset + 3] << 24)); } internal static uint LittleEndianToUInt32(byte[] buffer) { return (uint)(buffer[0] | (buffer[1] << 8) | (buffer[2] << 16) | (buffer[3] << 24)); } internal static ulong LittleEndianToUInt64(byte[] buffer) { return buffer[0] | ((ulong)buffer[1] << 8) | ((ulong)buffer[2] << 16) | ((ulong)buffer[3] << 24) | ((ulong)buffer[4] << 32) | ((ulong)buffer[5] << 40) | ((ulong)buffer[6] << 48) | ((ulong)buffer[7] << 56); } internal static byte[] UInt16ToLittleEndian(ushort value) { byte[] array = new byte[2]; UInt16ToLittleEndian(value, array); return array; } internal static void UInt16ToLittleEndian(ushort value, byte[] buffer) { buffer[0] = (byte)(value & 255); buffer[1] = (byte)((value & 65280) >> 8); } internal static byte[] UInt32ToLittleEndian(uint value) { byte[] array = new byte[4]; UInt32ToLittleEndian(value, array); return array; } internal static void UInt32ToLittleEndian(uint value, byte[] buffer) { buffer[0] = (byte)(value & 255); buffer[1] = (byte)((value & 65280) >> 8); buffer[2] = (byte)((value & 16711680) >> 16); buffer[3] = (byte)((uint)((int)value & -16777216) >> 24); } internal static void UInt32ToLittleEndian(uint value, byte[] buffer, int offset) { buffer[offset] = (byte)(value & 255); buffer[offset + 1] = (byte)((value & 65280) >> 8); buffer[offset + 2] = (byte)((value & 16711680) >> 16); buffer[offset + 3] = (byte)((uint)((int)value & -16777216) >> 24); } internal static byte[] UInt64ToLittleEndian(ulong value) { byte[] array = new byte[8]; UInt64ToLittleEndian(value, array); return array; } internal static void UInt64ToLittleEndian(ulong value, byte[] buffer) { buffer[0] = (byte)(value & 255); buffer[1] = (byte)((value & 65280) >> 8); buffer[2] = (byte)((value & 16711680) >> 16); buffer[3] = (byte)((value & 4278190080) >> 24); buffer[4] = (byte)((value & 1095216660480) >> 32); buffer[5] = (byte)((value & 280375465082880) >> 40); buffer[6] = (byte)((value & 71776119061217280) >> 48); buffer[7] = (byte)((ulong)((long)value & -72057594037927936) >> 56); } internal static byte[] UInt16ToBigEndian(ushort value) { byte[] array = new byte[2]; UInt16ToBigEndian(value, array); return array; } internal static void UInt16ToBigEndian(ushort value, byte[] buffer) { buffer[0] = (byte)(value >> 8); buffer[1] = (byte)(value & 255); } internal static void UInt16ToBigEndian(ushort value, byte[] buffer, int offset) { buffer[offset] = (byte)(value >> 8); buffer[offset + 1] = (byte)(value & 255); } internal static void UInt32ToBigEndian(uint value, byte[] buffer) { buffer[0] = (byte)((uint)((int)value & -16777216) >> 24); buffer[1] = (byte)((value & 16711680) >> 16); buffer[2] = (byte)((value & 65280) >> 8); buffer[3] = (byte)(value & 255); } internal static void UInt32ToBigEndian(uint value, byte[] buffer, int offset) { buffer[offset++] = (byte)((uint)((int)value & -16777216) >> 24); buffer[offset++] = (byte)((value & 16711680) >> 16); buffer[offset++] = (byte)((value & 65280) >> 8); buffer[offset] = (byte)(value & 255); } internal static byte[] UInt32ToBigEndian(uint value) { byte[] array = new byte[4]; UInt32ToBigEndian(value, array); return array; } internal static byte[] UInt64ToBigEndian(ulong value) { return new byte[8] { (byte)((ulong)((long)value & -72057594037927936) >> 56), (byte)((value & 71776119061217280) >> 48), (byte)((value & 280375465082880) >> 40), (byte)((value & 1095216660480) >> 32), (byte)((value & 4278190080) >> 24), (byte)((value & 16711680) >> 16), (byte)((value & 65280) >> 8), (byte)(value & 255) }; } internal static ushort BigEndianToUInt16(byte[] buffer) { return (ushort)((buffer[0] << 8) | buffer[1]); } internal static uint BigEndianToUInt32(byte[] buffer, int offset) { return (uint)((buffer[offset] << 24) | (buffer[offset + 1] << 16) | (buffer[offset + 2] << 8) | buffer[offset + 3]); } internal static uint BigEndianToUInt32(byte[] buffer) { return (uint)((buffer[0] << 24) | (buffer[1] << 16) | (buffer[2] << 8) | buffer[3]); } internal static ulong BigEndianToUInt64(byte[] buffer) { return ((ulong)buffer[0] << 56) | ((ulong)buffer[1] << 48) | ((ulong)buffer[2] << 40) | ((ulong)buffer[3] << 32) | ((ulong)buffer[4] << 24) | ((ulong)buffer[5] << 16) | ((ulong)buffer[6] << 8) | buffer[7]; } } }