c# - 更快地将 2 个连续字节的数组转换为整数

标签 c# .net mono boo

我有“大量”数据,可能在 50 到 100 兆字节之间变化。 我使用 filestreamer 将此数据作为字节数组读入。

问题是,我想将所有连续的 2 个字节转换为一个整数。 我这样做的方法是循环遍历字节数组,步长为 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);

关于c# - 更快地将 2 个连续字节的数组转换为整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14114509/

相关文章:

c# - 将文件保存到 ftp 服务器

c# - ASP.NET MVC 路由/SEO 友好 URL

c# - "\n"和 Environment.NewLine 的区别

c# - 类声明中的只读关键字

c# - SignalR OnConnected 与多个服务器和 Redis 背板

c# - 动态地向动态对象添加属性?

c# - 在 Dictionary<string, Dictionary<string, int>> 上进行 linq 查询时出现问题

c# - 从 couchbase View 获取计数器文档

c# - 未找到单声道 MissingMethodException : DateTimeOffset. FromUnixTimeSeconds

.net - 有人在 Amazon Elastic Beanstalk 上为 .NET 运行过单声道吗?