Comment faire pour convertir un sbyte[] pour byte[] en C#?
J'ai une fonction qui remplit un tableau de type sbyte[], et j'ai besoin de passer ce tableau à une autre fonction qui accepte un paramètre de type byte[].
Puis-je convertir joliment et rapidement, sans avoir à copier toutes les données ou à l'aide de unsafe
magie?
- juste ajouté quelques espaces pour le Q, j'espère que vous ne me dérange pas 😀
Vous devez vous connecter pour publier un commentaire.
Oui, vous le pouvez.
Depuis deux
byte
etsbyte
ont la même représentation binaire il n'y a pas besoin de copier les données.Il suffit de faire une fonte de Matrice, puis le jeter aux
byte[]
et ça va être assez.sbyte[] txdata = { (0x00 | 0x20), ~(1 << 6) }; byte[] dss = (byte[])((Array)txdata);
byte[]
à unsbyte[]
se faisant passer pour unebyte[]
.unsigned.GetValue(0)
est également de retour à sa valeur réelle-2
.Vous devrez copier les données (seule référence de type tableaux sont covariants) - mais on peut essayer de le faire de manière efficace;
Buffer.BlockCopy
semble fonctionner:Si c'était une référence de type, vous pouvez juste lancer la référence sans dupliquer le tableau:
Si vous êtes en utilisant .NET 3.5+, vous pouvez utiliser les éléments suivants:
Qui est, je suppose effectivement de copier toutes les données.
Remarque cette fonction est également en .NET 2.0, mais vous auriez à utiliser une méthode anonyme la place.