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

时间:2008-10-22 18:46:25

标签: vb.net arrays integer byte

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

4 个答案:

答案 0 :(得分:20)

“复制内存字节”是.NET不是特别适合的(而VB.NET甚至更少)。因此,除非切换到C是一个选项,否则函数调用几乎是不可避免的。

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

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

(顺便说一句,完全在将字节数组转换为整数时,BitConverter会为您做什么......)。

但是,这段代码:

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

换句话说:你可以“保存”一个函数调用,但最终你会变得更糟(甚至假设你没有引入任何错误)。一般来说,.NET Framework设计得非常非常好,除非遇到实际(性能)问题,否则不应该再考虑使用它的功能。

答案 1 :(得分:8)

  

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

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

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

答案 2 :(得分: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))

答案 3 :(得分:1)

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