将2个连续字节的阵列转换为整数更快



我有大量的数据,可能在50至100兆字节之间变化。我使用fileStreamer读取这些数据作为字节数组。

问题是,我想将所有连续的2个字节转换为整数。我这样做的方式是,我循环穿过一个带有两个步骤的字节,然后使用bitConvert进行转换:

_data[i] = BitConverter.ToInt16(soundData[i : i + 2], 0) // Convert 2 bytes into an int and store at i

因此,每个两个字节都变成INT16。但是,问题是,这太慢了,因为大约50兆字节的文件可能需要20秒!

是否有一种立即执行此操作的通用方法,而不是在我的数据数组的每个2个字节上调用此函数,这样它就不是那么慢了吗?最好以"安全"方式,因此没有不安全的代码。

如果字节的数组在正确的endian中,则只需分配一个int16数组并使用buffer.block副本(空气代码):

byte[] b = new byte[]{1, 2, 3, 4};
short[] s = new short[2]; // 4 bytes long
Buffer.BlockCopy(b, 0, s, 0, 4);

没有测试,我不确定我有数学和" endianess",但另一个选择是尝试这样的事情:

// Convert 2 bytes into an int and store at i
_data[j] = (int)soundData[i] + (soundData[i + 1] << 8);

如果还不够快,那么您可能需要其他方法来解决问题。

可以找到以下问题的其他想法:将字节数组转换为vb.net中的整数

最新更新