我知道如何做到这一点:通过创建必要大小的字节数组并使用for-loop来投射int数组中的每个元素。将int []转换为C#中的byte []
我想知道是否有更快的方法,因为如果int
大于sbyte
,上面的方法似乎会中断。
我知道如何做到这一点:通过创建必要大小的字节数组并使用for-loop来投射int数组中的每个元素。将int []转换为C#中的byte []
我想知道是否有更快的方法,因为如果int
大于sbyte
,上面的方法似乎会中断。
如果你想按位拷贝,即得到4个字节了一个整型,然后使用Buffer.BlockCopy
:
byte[] result = new byte[intArray.Length * sizeof(int)];
Buffer.BlockCopy(intArray, 0, result, 0, result.Length);
不要使用Array.Copy
,因为它会尝试转换,而不仅仅是复制。请参阅MSDN页面上的备注以获取更多信息。
int[] ints = { 1, 2, 3, 4, 5, 6 };
byte[] bytes = ints.Select(x => (byte)x).ToArray();
-1:**这只是错误的**:(1)您缺少'ToArray()' ,所以它甚至不会编译。 (2)解决该问题后,您将会收到一个异常,因为Cast只会取消装箱值。更多信息:http://stackoverflow.com/questions/445471/puzzling-enumerable-cast-invalidcastexception – 2011-05-05 13:31:27
@Daniel:Woops,编码,没有测试它。感谢您指出了这一点。 – 2011-05-06 10:21:02
new [] {1,2,3} .Select(n =>(byte)n).ToArray()的工作原理是 – JackNova 2012-12-24 17:07:47
除了公认的答案(我现在用的),另一种只有一行对LINQ爱好者将是:
byte[] bytes = ints.SelectMany(BitConverter.GetBytes).ToArray();
我想,虽然,这将是慢...
是的,但它的罚款快速短单元测试。提出了一个编辑,因为你不需要'v =>'... ... yptes(v)' – 2016-02-12 11:42:41
'byte array'和“大于'short'”不匹配。 – 2011-05-05 12:15:29
一小段代码可以消除这么多的猜测。 – 2011-05-05 12:16:13
我的意思是int不是一对一的字节大小。 – soandos 2011-05-05 12:30:12