2011-11-11 24 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是你最好的選擇。儘管看起來有點「哈克」,但這只是讓編譯器感到高興的一件瑣事。而且這個顯然是最快的,因爲數據不會被複制。

我做了一個快速測試,類型轉換似乎很好。負值被正確轉換,所以歸結爲簡單的類型強制。