哪种方式是从Sbyte []转换为Byte []的最佳方式

时间:2011-11-11 04:28:58

标签: c# .net

我一直在寻找从sbyte []转换为byte []

的几种方法

我见过的最常见的方法如下

1

sbyte[] signed = { -2, -1, 0, 1, 2 }; 
byte[] unsigned = (byte[]) (Array)signed; 

2

sbyte[] signed = { -2, -1, 0, 1, 2 }; 
byte[] unsigned = new byte[signed.Length]; 
Buffer.BlockCopy(signed, 0, unsigned, 0, signed.Length); 

3

byte[] dest = Array.ConvertAll(sbyteArray, (a) => (byte)a); 

这些方法的优点和缺点是什么?举个例子来说明我想要完成的任务。我将图像作为sbyte []接收,并希望使用Image类将图像保存到磁盘。

Image pic = Image.FromStream(new MemoryStream((byte[]) ((Array) sbyteArr)));

1 个答案:

答案 0 :(得分:1)

#1是你最好的选择。即使它看起来有点" hacky",它只是让编译器开心的黑客攻击。而这个显然是最快的,因为数据不会被复制。

我做了一个快速测试,类型转换似乎很有效。负值正确转换,因此归结为简单的类型强制。