2011-11-11 25 views
3

我一直在寻找一对夫妇的方式从为sbyte []转换为字节[]哪种方式是从为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

#1是你最好的选择。尽管看起来有点“哈克”,但这只是让编译器感到高兴的一件琐事。而且这个显然是最快的,因为数据不会被复制。

我做了一个快速测试,类型转换似乎很好。负值被正确转换,所以归结为简单的类型强制。