Convertir en tableau d'octets à court tableau en C#
Je suis en train de lire un fichier et je voulais être en mesure de convertir le tableau d'octets obtenus à partir du fichier dans un tableau short.
Comment pourrais-je aller sur le faire?
Voulez-vous convertir 1 octet à 1 ou 2 octets pour 1 court?
OriginalL'auteur williamtroup | 2009-07-09
Vous devez vous connecter pour publier un commentaire.
Une possibilité est d'utiliser
Énumérable.Sélectionnez
:Une autre est d'utiliser
Array.ConvertAll
:Une autre option serait d'octets.Cast<>().ToArray();
En fait, il en résulte une InvalidCastException. L'explication est que ce code implicitement provoque une boîte octets à unboxed pour un court, ce qui n'est pas valide unboxing de l'opération. Pour plus de détails, voir stackoverflow.com/questions/445471/....
Lorsque j'ai utilisé var short[] = Array.ConvertAll(octets, b => (court)b); j'ai obtenu à chaque octet converti en bref pas chaque paire d'octets converti.
OriginalL'auteur jason
Utilisation De la mémoire tampon.BlockCopy.
Créer le tableau short à la moitié de la taille du tableau d'octets, et de copier l'octet de données dans:
C'est la méthode la plus rapide et de loin.
Merci! Grande réponse mais j'ai dû changer le code légèrement à court[] sdata = nouveau court - [(int)Math.Plafond(de données.Longueur / 2.0)];. Sinon, j'aurais obtenu l'erreur suivante: "L'appel est ambigu entre les méthodes suivantes ou les propriétés:" Maths.Plafond(décimal) " et " les Mathématiques.Plafond(double)' "
OriginalL'auteur steppenwolfe
OriginalL'auteur Gabriel
Un shorthard est un composé de deux octets. Si vous êtes à la rédaction de tous les courts-métrages pour le fichier comme de véritables courts métrages puis ces conversions sont mauvais. Vous devez utiliser deux octets pour obtenir la vraie valeur courte, en utilisant quelque chose comme:
En supposant que little endian, ce devrait être: short s = (short)(octets[0] | (octets[1] << 8))
OriginalL'auteur
OriginalL'auteur Philippe Leybaert
Je ne sais pas, mais je me serais attendu à une autre approche de cette question.
Lors de la conversion d'une séquence d'octets en une suite de courts-métrages, je l'aurais fait comme @Pierre ne
ou
selon endianess des octets dans le fichier.
Mais l'OP na pas mentionner l'utilisation des shorts ou la définition de courts métrages dans le fichier.
Dans son cas, elle n'aurait aucun sens pour convertir le tableau d'octets pour un court tableau, parce qu'il faudrait deux fois plus de mémoire, et je doute que si un octet serait nécessaire pour être converti en bref, lorsque utilisé ailleurs.
OriginalL'auteur Wolfgang Roth
oui, il est inefficace. Je pense qu'il est plus sûr, tho, puis de la coulée.
Plus sûr que de casting? Un casting d'octets à court fonctionne toujours. Il ne peut jamais lever une exception
OriginalL'auteur Muad'Dib