我一直在寻找从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)));
答案 0 :(得分:1)
#1是你最好的选择。即使它看起来有点" hacky",它只是让编译器开心的黑客攻击。而这个显然是最快的,因为数据不会被复制。
我做了一个快速测试,类型转换似乎很有效。负值正确转换,因此归结为简单的类型强制。