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 le convertir facilement et rapidement, sans copier toutes les données ou en utilisant unsafe
magic?Comment convertir un sbyte [] en octet [] en C#?
Répondre
Oui, vous pouvez. Comme les deux byte
et sbyte
ont la même représentation binaire, il n'est pas nécessaire de copier les données. Faites simplement un casting sur Array, puis lancez-le sur byte[]
et ce sera suffisant.
sbyte[] signed = { -2, -1, 0, 1, 2 };
byte[] unsigned = (byte[]) (Array)signed;
Wow, génial! Je n'avais pas pensé à ça. : P –
Assez souvent, je reçois un type de tableau de discordance en utilisant cette approche –
J'ai essayé mais cela fonctionne. Les résultats étaient des points d'interrogation. Quelque chose que je n'ai jamais vu auparavant. Voici le code 'sbyte [] txdata = {(0x00 | 0x20), ~ (1 << 6)}; byte [] dss = (octet []) ((Array) txdata); ' –
Vous devrez copier les données (seules les matrices de type référence sont covariantes) - mais nous pouvons essayer de le faire efficacement; Buffer.BlockCopy
semble fonctionner:
sbyte[] signed = { -2, -1, 0, 1, 2 };
byte[] unsigned = new byte[signed.Length];
Buffer.BlockCopy(signed, 0, unsigned, 0, signed.Length);
Si c'était un type de référence, vous pouvez simplement jeté la référence sans dupliquer le tableau:
Foo[] arr = { new Foo(), new Foo() };
IFoo[] iarr = (IFoo[])arr;
Console.WriteLine(ReferenceEquals(arr, iarr)); // true
Eh oui ... mais lire la dernière phrase de la question. ;) –
Édité pour inclure la note sur la covariance –
Vraiment ??? Vous fournissez une réponse en incluant "les tableaux de type de référence sont covariants"? Allez, au moins essayer d'être utile sans le bling sémantique auto-gratifiant. – BoiseBaked
Si vous utilisez 3.5+ .NET, vous pouvez utiliser ce qui suit:
byte[] dest = Array.ConvertAll(sbyteArray, (a) => (byte)a);
Qui est, je suppose que la copie efficace de toutes les données.
Notez que cette fonction est également dans .NET 2.0, mais vous devrez utiliser une méthode anonyme à la place.
Pouah. Je préfère utiliser Buffer.BlockCopy() alors. Cela copie au moins aveuglément un tas d'octets. Celui-ci a un appel de fonction pour chacun d'eux. Cauchemar de performance. –
Eh bien, tout dépend de combien vous copiez, mais oui, la copie de bloc a plus de sens. En fin de compte, si vous voulez la sécurité de type, la seule façon est de copier. Si vous voulez convertir (re-cast) le tableau, le danger est la seule façon d'y aller. – Clinton
LOL! Ou vous pouvez faire la même chose sans le surcoût: byte [] foo = (byte []) (Array) signed; – BoiseBaked
- 1. Comment convertir un flux en octet [] en C#?
- 2. Comment convertir un nombre en octet?
- 3. iTextSharp - Comment convertir un document en octet []
- 4. Comment convertir un octet en une chaîne dans vb.net?
- 5. Conversion d'un sbyte en char cls
- 6. Comment convertir (translittérer) une chaîne de utf8 en ASCII (un seul octet) dans C#?
- 7. zlib de C++ vers C# (Comment convertir octet [] pour streamer et streamer vers octet [])
- 8. comment convertir hex en octet pour le programme suivant?
- 9. Comment assigner octet [] comme un pointeur en C#
- 10. Convertir UTF-8 en ISO-8859-1 en Java - comment le garder en octet unique
- 11. octet vb.net Convertir php
- 12. Java (J2ME) Convertir l'image en octet [], puis revenir à l'image
- 13. Comment puis-je convertir un tableau sur le client en un octet [] sur le serveur?
- 14. Comment convertir un DataTable en chaîne en C#?
- 15. Comment convertir un délégué en objet en C#?
- 16. Comment convertir un double en chaîne en C++?
- 17. Conversion d'un octet en un octet de 7 bits
- 18. Convertir un tableau d'octets en un tableau court en C#
- 19. Comment convertir une chaîne en ascii en binaire en C#?
- 20. Comment convertir un sqlite3_int64 en un long?
- 21. manière fiable pour convertir un fichier à un octet []
- 22. Convertir un extrait de C# en vbscript
- 23. C# convertir un tableau d'objets en datatable
- 24. Convertir IntPtr en int * en C#?
- 25. C#: Comment convertir long en ulong
- 26. Comment convertir une chaîne en OctetString (C#)?
- 27. C# convertir hexadécimal en ip
- 28. Convertir Char [] en une liste <byte> (C#)
- 29. Comment convertir chaîne à LPWSTR en C++
- 30. Comment ouvrir octet [] en format Adobe?
vient d'ajouter quelques espaces à la Q, espère que vous ne me dérange pas: D – inspite