visual new net initialize for example array vb.net arrays integer byte

new - Convertir matriz de bytes en entero en VB.Net



vb.net initialize array()() (4)

Soy consciente de BitConverter, pero me parece un desperdicio hacer una llamada a la función para hacer algo que debería poder hacerse copiando 4 bytes de memoria.

Mientras que veo la situación como "parece un desperdicio tratar de codificar manualmente una forma eficiente de hacer esto cuando ya hay una llamada a un método que hace exactamente lo que yo quiero".

A menos que esté absolutamente convencido de que tiene un cuello de botella de rendimiento en esta pieza exacta de código, use la funcionalidad proporcionada por el marco.

Me pregunto cuál es la mejor forma de convertir una matriz de bytes (longitud 4) a un número entero en vb.net? Soy consciente de BitConverter, pero me parece un desperdicio hacer una llamada a función para hacer algo que debería poder hacerse copiando 4 bytes de memoria. En la misma línea, ¿qué hay de convertir una sola / doble de su representación binaria en una variable única / doble?


"Copiar bytes de memoria" es algo que .NET no es especialmente adecuado (y VB.NET aún menos). Entonces, a menos que cambiar a C sea una opción para usted, una llamada a la función es casi inevitable para esto.

BitConverter es una función bien pensada y probada. Por supuesto, puedes evitarlo haciendo algo como (en C #):

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

(que es, por cierto, exactamente lo que BitConverter hace por usted al convertir una matriz de bytes a un Entero ...).

Sin embargo, este código:

  • Es mucho, mucho más difícil de leer y entender que el equivalente de BitConverter;
  • No hace ninguna de las comprobaciones de error que BitConverter hace por usted;
  • No diferencia entre representaciones little-endian y big-endian, como lo hace BitConverter.

En otras palabras: puede "guardar" una llamada a función, pero al final será significativamente peor (incluso suponiendo que no introduzca ningún error). En general, .NET Framework está muy, muy bien diseñado, y no debe pensar dos veces antes de usar su funcionalidad, a menos que encuentre problemas reales (de rendimiento) con ella.


Puede bloquear el byte de copia [] a int [] usando la clase System.Buffer.


mdb es exactamente correcto, pero, aquí hay un código para convertir una matriz de bytes vb en un pequeño entero endian de todos modos ... (en caso de que desee escribir su propia clase bitconverter)

''donde bits () es su matriz de bytes de longitud 4

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