这里的转换是指在二制上的转换,不是指数值上的转换 public static void Run() { short[] arrs = { -1, 2, 3, -2, 1 }; byte[] arrb = new byte[arrs.Length * 2]; Buffer.BlockCopy(arrs, 0, arrb, 0, arrb.Length); short[] arrc = new short[arrb.Length / 2]; Buffer.BlockCopy(arrb, 0, arrc, 0, arrb.Length); Console.WriteLine("------short-------"); foreach (short s in arrs) { Console.Write("/t s {0:X2}" , s); } Console.WriteLine("/n------byte-------"); foreach (byte s in arrb) { Console.Write("/t s " + s); } Console.WriteLine("/n------later short-------"); foreach (short s in arrc) { Console.Write("/t s " + s); } } public static void Run2() { Console.WriteLine(".............."); short[] arrs = { -1, 2, 3, -2, 1 }; byte[] arrb = new byte[arrs.Length * 2]; for (int i = 0; i < arrs.Length; i++) { arrb[i * 2] =(byte)(arrs[i] & 0x00FF); arrb[i * 2 + 1] = (byte)((arrs[i] & 0xFF00) >> 8); } short[] arrc = new short[arrb.Length / 2]; for (int i = 0; i < arrc.Length; i++) { arrc[i] =(short)( (arrb[i * 2 + 1] << 8) | arrb[i * 2]); } Console.WriteLine("-/n/n/n/n-----short-------"); foreach (short s in arrs) { Console.Write("/t s {0:X2}", s); } Console.WriteLine("/n------byte-------"); foreach (byte s in arrb) { Console.Write("/t s " + s); } Console.WriteLine("/n------later short-------"); foreach (short s in arrc) { Console.Write("/t s " + s); } } ref: http://topic.csdn.net/t/20060429/09/4722493.html