在VB.Net中将字节数组转换为整数

4

我想知道在vb.net中将长度为4的字节数组转换为整数的最佳方法是什么?我知道BitConverter,但似乎调用函数来执行应该能够通过复制4个字节的内存来完成的操作有些浪费。同样,在相同的线路上,如何将单/双精度从其二进制表示转换为单/双精度变量。


3
这个短语是“过早优化”。如果你认为这是你的瓶颈,那么你错了。真的。瓶颈在别处。 - Clinton Pierce
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 设计得非常出色,您不应该犹豫使用其功能,除非您真的遇到了(性能)问题。


8
我知道BitConverter,但是调用函数去做可以通过复制4个字节的内存来完成的事情似乎有些浪费。
相比之下,我认为这种情况就像是“试图手动编写一个高效的方法来完成这个任务是一种浪费,因为已经有一个方法可以完全满足我的需求。”
除非你绝对确信在这段代码中存在性能瓶颈,否则请使用框架提供的功能。

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

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

Dim i as Integer 

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

1
我相信自1.1版(VB.NET 2003)以来一直得到支持。 - sbeskur

1

你可以使用System.Buffer类将byte[]块复制到int[]中。


有兴趣详细介绍一下吗?听起来很有意思。 - divinci

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接