10
votes

Pourquoi 'bitconverter.getbytes ()' accepter l'argument de type "octet" et renvoie toujours un tableau de 2 octets?

J'utilise bitconverter.getbytes () Pour convertir diverses variables (de types différents) en une matrice d'octet, pour transmettre à une méthode personnalisée où je dois vérifier la valeur de chaque octet .

J'ai remarqué que je peux passer une variable de type octet sur bitconverter.getbytes () (même s'il n'est pas répertorié dans la liste de surcharge: < un href = "http://msdn.microsoft.com/en-us/library/system.bitconverter.getbytes%28v=vs.100%29.aspx"> voir la page MSDN associée ) et dans ce cas J'ai toujours une matrice de 2 octets comme valeur de retour. Ne devrais-je pas avoir un tableau monte-octet comme valeur de retour? Comment .NET interpréter l'argument d'octet?

échantillon: xxx


4 commentaires

L'échantillon serait plus intéressant avec arg! = 0x00


Comme les réponses indiquent, vous voyez les résultats d'une conversion implicite de octet vers court . Voici la liste des conversions numériques implicites prédéfinies dans C #: msdn.microsoft.com/en-us/library/y5b434w4(v=VS.110).aspx


Les concepteurs-cadres ont supposé que vous n'avez pas besoin d'aide pour convertir un octet vers un octet.


@Prestonguillot Je ne savais pas l'existence de cette table, très intéressante. (Et merci à tous pour le soutien!)


4 Réponses :


13
votes

Lorsque vous recherchez GetBytes () vous trouvera qu'il n'y a pas de surcharge qui prend un paramètre octet .

Vous envisagez les résultats de la correspondance la plus proche, getbytes (int16) et que bien sûr produit A octet [2] .

En d'autres termes, votre code: xxx

est équivalent à: xxx


0 commentaires

1
votes

Il utilise réellement la surcharge pour courte au lieu de octet , ce qui signifie qu'il mondit votre octet sur un court , qui est 2 octets longs.


0 commentaires

1
votes

Il n'y a pas de surcharge pour getBytes qui accepte un octet .

Cependant, la section 6.1.2 de la spécification de langue C # indique qu'il existe une conversion numérique implicite

• De l'octet à court, Ushort, int, uint, long, ulong, flotteur, double ou décimal.

Ceci provoque le compilateur de convertir le octet sur court (qui correspond à 2 octets), ce qui provoque la méthode de retour d'une matrice de 2 octets.


0 commentaires

3
votes

Comme les autres réponses ont signalé, il n'y a pas de surcharge de getBytes qui prend un paramètre d'octet. La question suivante est pourquoi choisir la surcharge qui prend une courte durée. Il pourrait choisir l'un de ces éléments par exemple:

      S         
C1   byte     short (T1)
C2   byte     int   (T2)


0 commentaires