Question

Je me demande quel est le meilleur moyen de convertir un tableau d'octets (longueur 4) en entier, dans vb.net? Je suis au courant de BitConverter, mais cela semble être un gaspillage de faire un appel de fonction pour faire quelque chose qui devrait pouvoir être fait en copiant 4 octets de mémoire. Dans le même ordre d’idées, qu’en est-il de la conversion d’un simple / double de sa représentation binaire en une variable simple / double?

Était-ce utile?

La solution

"Copier des octets de mémoire" C'est quelque chose pour lequel .NET n'est pas particulièrement adapté (et VB.NET encore moins). Donc, à moins que le passage au C ne soit une option pour vous, un appel de fonction est quasiment inévitable pour cela.

BitConverter est une fonction bien pensée et testée. Bien sûr, vous pouvez éviter cela en faisant quelque chose comme (en C #):

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

(ce qui est d'ailleurs exactement ce que BitConverter fait pour vous lors de la conversion d'un tableau d'octets en un entier ...).

Cependant, ce code:

  • est beaucoup, beaucoup plus difficile à lire et à comprendre que son équivalent BitConverter;
  • Ne commettez aucune erreur en vérifiant que BitConverter fait pour vous;
  • Ne fait pas la différence entre les représentations little-endian et big-endian, comme le fait BitConverter.

En d'autres termes, vous pouvez "enregistrer". un appel de fonction, mais votre situation sera bien pire à la fin (même si vous n'introduisez aucun bogue). En général, le .NET Framework est très, très bien conçu, et vous ne devriez pas songer à utiliser ses fonctionnalités, sauf si vous rencontrez des problèmes (de performance) réels.

Autres conseils

  

Je connais BitConverter, mais ça   semble être un gaspillage de faire un   appel de fonction pour faire quelque chose qui   devrait pouvoir être fait en copiant 4   octets de mémoire.

Alors que je considère la situation comme "cela semble être un gâchis d'essayer de coder à la main un moyen efficace de le faire, alors qu'il existe déjà un appel de méthode qui fait exactement ce que je veux".

Sauf si vous êtes absolument convaincu que vous avez un goulot d'étranglement dans les performances de cet élément de code, utilisez les fonctionnalités fournies par le cadre.

mdb est tout à fait correct, mais voici un peu de code pour convertir un tableau d'octets vb en petit entier endian de toute façon ... (juste au cas où vous voudriez écrire votre propre classe de convertisseur de bits)

'où bits () est votre tableau d'octets de longueur 4

Dim i as Integer 

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

Vous pouvez bloquer la copie d'octets [] vers int [] à l'aide de la classe System.Buffer.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top