什么是在C#中将位从Int复制到byte数组的最快方法?
我有几个int,并且我需要将它们(有时全部,有时部分)按顺序逐位复制到byte[]中...
我需要这个过程尽可能高效(例如,避免在过程中创建新的byte array,因为我了解BitConverter等)。
我有几个int,并且我需要将它们(有时全部,有时部分)按顺序逐位复制到byte[]中...
我需要这个过程尽可能高效(例如,避免在过程中创建新的byte array,因为我了解BitConverter等)。
避免在每次调用时创建新的byte[]
数组的一种方法是在MemoryStream
上创建一个BinaryWriter
,将您的整数写入其中,然后通过访问MemoryStream
的缓冲区一次性获取所有结果:
var buf = new byte[400];
using (var ms = new MemoryStream(buf))
using (var bw = new BinaryWriter(ms)) {
for (int i = 0 ; i != 100 ; i++) {
bw.Write(2*i+3);
}
}
// At this point buf contains the bytes of 100 ints
buf
传递给MemoryStream
,我可以继续重复使用相同的流或相同的缓冲区。 - Sergey KalinichenkoBinaryWriter
会先创建一个大小为16的缓冲区,然后不断重复使用它。可以在源代码中看到名为 _buffer
的字段。 - Sergey Kalinichenko
var b0=val&0xff; var b1=(val>>8)&0xff; var b2=(val>>16)&0xff; var b3=(val>>24)&0xff;
并随意处理它们。 - spender