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