La conversion d'un int[] pour byte[] en C#
Je sais comment le faire le long chemin: par la création d'un tableau d'octets de la taille nécessaire et à l'aide d'une boucle for pour lancer à chaque élément du tableau int.
Je me demandais si il y avait un moyen plus rapide, car il semble que la méthode ci-dessus serait briser si la int
était plus grand qu'un sbyte
.
byte array
et "plus grand queshort
" incompatibilité.- Je voulais dire que l'int n'est pas un à un avec un octet en termes de taille.
- Et court/ushort ne sont pas un à un avec l'octet.
- mon mauvais, signifiait sbyte
- et voulez-vous convertir 4 octets à 1 int, ... etc. Veuillez noter que le lien Modifier en vertu de votre question.
- Des excuses. Je ne pense pas à ce sujet, mais suppose que je pourrais juste de charge de 4 octets, puis les lire comme un int. semble qu'il exige plus de "formatage" de ne pas tous les 4 octets était peut-être destiné à être un int (chiffres plus petits nécessitent moins d'espace, et comme indiqué ci-dessus, directement casting conduit à la perte de données).
Vous devez vous connecter pour publier un commentaire.
Si vous voulez une copie bit à bit, c'est à dire 4 octets d'un int, puis utilisez
de la mémoire Tampon.BlockCopy
:Ne pas utiliser
Array.Copie
, car il va essayer de convertir et de ne pas simplement copier. Voir les remarques sur la page MSDN pour plus d'info.int
oubyte
. La mémoire de la représentation deresult
sera exactement la même que celle deintArray
.byte[] result = new byte[Buffer.ByteLength((Array)valueTypeArray)];
([System.Text.Encoding]::ASCII.GetString($Monitor.SerialNumberID)).Replace("$([char]0x0000)","")
En plus de la accepté de répondre (dont je suis maintenant en utilisant), un autre one-liner pour les amateurs de Linq serait:
Je suppose, cependant, qu'il serait plus lent...
v=>
... yptes(v)
ToArray()
, de sorte qu'il ne sera même pas compiler. (2) Après que vous avez fixé, vous aurez une exception, parce que les acteurs n'est unboxing de la valeur. Plus d'infos: stackoverflow.com/questions/445471/...Convert.ToByte(val)
au lieu de(byte)val
.TakeWhile(Function(ui) ui <> 0).Select(Function(ui) Convert.ToByte(ui)).ToArray()
?