我想知道在 vb.net 中将字节数组(长度 4)转换为整数的最佳方法是什么?我知道 BitConverter,但执行函数调用来执行应该可以通过复制 4 字节内存来完成的操作似乎相当浪费。同样,将单/双精度数从二进制表示形式转换为单/双精度变量怎么样。

有帮助吗?

解决方案

.NET 并不特别适合“复制内存字节”(VB.NET 更不适合)。因此,除非您可以选择切换到 C,否则函数调用几乎是不可避免的。

BitConverter 是一个经过深思熟虑、经过测试的功能。当然,您可以通过执行类似(在 C# 中)的操作来避免它:

myInt = (*pbyte) | (*(pbyte + 1) << 8)  | (*(pbyte + 2) << 16) | (*(pbyte + 3) << 24);

(顺便说一句, 确切地 当将字节数组转换为整数时,BitConverter 会为您做什么...)。

然而,这段代码:

  • 比 BitConverter 等价物更难阅读和理解;
  • 不执行 BitConverter 为您所做的任何错误检查;
  • 不区分小端和大端表示,就像 BitConverter 那样。

换句话说:你可能会“保存”一个函数调用,但最终你的情况会变得更糟(即使假设你没有引入任何错误)。一般来说,.NET Framework 的设计非常非常好,您不应该在使用它的功能时三思而后行,除非您遇到实际的(性能)问题。

其他提示

  

我知道BitConverter,但它   做一个看起来很浪费   函数调用做某事   应该可以通过复制4来完成   记忆的字节数。

然而,我将这种情况视为“当已经有一个方法调用完全符合我的要求时,试图手动编写一种有效的方法,这似乎是一种浪费。”

除非您绝对确信您在这段代码中存在性能瓶颈,否则请使用框架提供的功能。

mdb完全正确,但是,这里有一些代码可以将vb字节数组转换为小端整数...(以防你想编写自己的bitconverter类)

'其中bits()是长度为4的字节数组

Dim i as Integer 

i = (((bits(0) Or (bits(1) << 8)) Or (bits(2) << &H10)) Or (bits(3) << &H18))

您可以使用System.Buffer类将copy byte []复制到int []。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top