J'ai un octet [] et je suis itération à travers une liste d'INT (et d'autres données) et je souhaite copier l'int vers mon byTearray [Index * 4] Comment puis-je faire cela? P>
7 Réponses :
bitconverter code>
est tout à fait Peut-être votre ami.
Cependant, cela vous renvoie généralement un nouveau tableau em> octet. Cela ne vous permet pas également de spécifier l'endansion. J'ai le Par exemple: P> EndianbitConverter Code> Classe dans MISCUTIL qui a des méthodes pour convertir primitive Types en copiant les données directement dans une matrice d'octets existante. P>
// Copy the bytes from the integer "value" into a byte array
// (buffer) starting at index 5
EndianBitConverter.Little.CopyBytes(value, buffer, 5);
Wow, vous apprenez quelque chose de nouveau chaque jour :) Je ne savais même pas que cela existait!
D'accord, mieux que l'approche changeante, car vous n'avez pas besoin de penser à l'endian-ness. (À moins que, bien sûr, il a besoin de le changer).
Faites-le comment le binarywriter le fait: (évidemment, cela copiera l'INT dans les 4 premiers octets du tableau) P> P>
byte[] bytes = new byte[listOfInts.Count * sizeof(int)]; int pos = 0; foreach(int i in listOfInts) { byte[] b = BitConverter.GetBytes(i); b.CopyTo(bytes, pos); pos += b.Length; }
tampon.blockcopie (intarray, 0, byteArray, 0, 4 * intarray.length) p>
copie des données entre deux tableaux. Le dernier argument est la quantité de données à copier en octets. P>
Il existe de nombreuses façons différentes de le faire, mais de le rendre plus agréable, utilise une nouvelle fonctionnalité de C #: Extensions.
Un entier de la variété 32 bits prend 4 octets, de sorte qu'il occupera 4 taches dans l'octet []. Comment briser un entier dans ses 4 octets constitutifs? Vous pouvez le faire en utilisant l'opérateur de manipulation de bits >>. Cet opérateur déplace les bits dans l'entier par le nombre de bits spécifié. Par exemple: P>
int something = 20; byte[] array = new byte[4]; something.CopyToByteArray(array,0);
Je vais essayer de résumer certaines des réponses précédentes pour faire quelque chose de nouveau
BitConverter est probablement votre ami. p>
Cependant, cela vous renvoie généralement un nouveau réseau em> octet. p>
blockQuote> étape 2. strong> Vous pouvez trouver le code source de bitconverter.getbytes (int Value) (int> p>
public static unsafe byte[] GetBytes(int value, int buffer[], int offset)
{
// Here should be a range check. For example:
// if (offset > buffer.Length + sizeof(int)) throw new IndexOutOfRangeException();
fixed (byte* numPtr = &buffer[offset])
*(int*) numPtr = value;
}
Les étapes 2 et 3 ressemblent à son endian dépendante. Pouvez-vous confirmez s'il vous plaît?
Oui, les deux étapes sont endibiales.
Si nous utilisons des opérateurs de changement de bits, il peut s'agir de Code indépendant de l'Endian?
Généralisation de la réponse exquise de l'adb: