[英]How to convert a sbyte[] to byte[] in C#?
我有一个函数填充sbyte []类型的数组,我需要将此数组传递给另一个接受byte []类型参数的函数。
我可以很好地快速转换它,而无需复制所有数据或使用unsafe
魔法吗?
是的你可以。 由于byte
和sbyte
都具有相同的二进制表示,因此无需复制数据。 只需对Array进行强制转换,然后将其转换为byte[]
即可。
sbyte[] signed = { -2, -1, 0, 1, 2 };
byte[] unsigned = (byte[]) (Array)signed;
你将不得不复制数据(只有参考类型的数组是协变的) - 但我们可以尝试有效地做到这一点; Buffer.BlockCopy
似乎有效:
sbyte[] signed = { -2, -1, 0, 1, 2 };
byte[] unsigned = new byte[signed.Length];
Buffer.BlockCopy(signed, 0, unsigned, 0, signed.Length);
如果它是引用类型,则只需转换引用而不复制数组:
Foo[] arr = { new Foo(), new Foo() };
IFoo[] iarr = (IFoo[])arr;
Console.WriteLine(ReferenceEquals(arr, iarr)); // true
如果您使用的是.NET 3.5+,则可以使用以下命令:
byte[] dest = Array.ConvertAll(sbyteArray, (a) => (byte)a);
也就是说,我猜有效地复制了所有数据。
请注意,此功能也在.NET 2.0中,但您必须使用匿名方法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.