public static void Main()
short[] values = {16400, -2098, -9962, -30933};
byte[] buf = new byte[values.Length * sizeof(short)];
for (int i = 0; i < values.Length; i++)
byte[] sh_buf = BitConverter.GetBytes(values[i]);
if (BitConverter.IsLittleEndian)
buf[(3 - i) * 2] = sh_buf[0];
buf[(3 - i) * 2 + 1] = sh_buf[1];
buf[i * 2 + 1] = sh_buf[1];
double result = BitConverter.ToDouble(buf, 0);
Console.WriteLine(result);