4

我想知道将字节数组(长度为 4)转换为整数的最佳方法是在 vb.net 中吗?我知道BitConverter,但是执行函数调用来做一些应该可以通过复制4字节内存来完成的事情似乎很浪费。同样,如何将单/双从其二进制表示形式转换为单/双变量。

4

4 回答 4

20

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

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

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

(顺便说一句,这正是BitConverter 在将字节数组转换为整数时所做的事情......)。

但是,这段代码:

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

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

于 2008-10-22T18:59:55.743 回答
8

我知道BitConverter,但是执行函数调用来做一些应该可以通过复制4字节内存来完成的事情似乎很浪费。

而我认为这种情况是“当已经有一个方法调用完全符合我的要求时,尝试手动编写一种有效的方法来执行此操作似乎是一种浪费。”

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

于 2008-10-22T19:40:59.107 回答
2

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

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

Dim i as Integer 

i = (((bits(0) Or (bits(1) << 8)) Or (bits(2) << &H10)) Or (bits(3) << &H18))
于 2008-10-22T19:16:04.760 回答
1

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

于 2008-10-22T19:19:11.150 回答