【发布时间】:2017-05-04 18:41:21
【问题描述】:
我有一个由字节数组表示的 Int32 数组(每 4 个字节为 1 个 Int32),我想将它们转换为 Int32 数组(长度为 Byte.length/4)。 这是我想要的示例:
//byte[] buffer;
for (int i=0; i<buffer.Length; i+=4)
{
Int32 temp0 = BitConverter.ToInt32(buffer, i);
temp0 += 10;
byte[] temp1 = BitConverter.GetBytes(temp0);
for (int j=0;j<4;j++)
{
buffer[i + j] = temp1[j];
}
}
但我不想复制它们,我只想能够告诉编译器它是 Int32 数组而不是字节数组(以便以后操作)。
我查看了这个How to Convert a byte array into an int array,但它将每个字节转换为 Int32,我想将每个 4 个字节转换为 Int32。 我也想这样做而不将其复制到另一个数组中以提高性能。
(我们可以假设硬件是本地字节序,用于小端表示的小端系统)。
【问题讨论】:
-
听起来像是不安全和指针的工作
-
Here是
BitConverter.ToInt32(byte[], Int32)的源代码;我认为这段代码:fixed( byte * pbyte = &value[startIndex]) {if( startIndex % 4 == 0) { // data is aligned return *((int *) pbyte); }意味着它只是在对齐时将 4 个字节转换为 int32,它确实不 转换,因此应该很快。有人可以验证吗? -
@pm100 你能写出不安全的代码吗?我试过了,但我遇到了各种各样的错误:(