2009-02-19 7 views
4

Je me demandais si quelqu'un ici connaissait un moyen efficace de transformer un entier en un octet [4]? J'essaie d'écrire un int dans MemoryStream, et cette chose veut que je lui donne des octetsCast int à byte [4] dans .NET

Répondre

14

Vous pouvez utiliser BitConverter.GetBytes si vous voulez convertir un type primitif à sa représentation d'octets. N'oubliez pas de vous assurer que l'endianness est correct pour votre scénario.

+0

Merci! Je savais qu'il y avait un moyen facile de le faire :) – galets

7

Utilisez un BinaryWriter (construit avec votre flux de mémoire); il a une méthode d'écriture qui prend un Int32.

BinaryWriter bw = new BinaryWriter(someStream); 
bw.Write(intValue); 
bw.Write((Int32)1); 
// ... 
+0

Bonne idée! Merci – galets

6
  • BinaryWriter sera la solution la plus simple d'écrire à un flux
  • BitConverter.GetBytes est le plus approprié si vous voulez vraiment un tableau
  • Mes propres versions en MiscUtil (EndianBitConverter et EndianBinaryWriter) vous donner plus de contrôle sur l'endianness, et vous permettent également de convertir directement dans un tableau existant.
3

Vous pouvez également faire votre propre décalage! Bien que j'utiliserais les méthodes intégrées, j'ai décidé d'y jeter un coup d'œil.

byte[] getBytesFromInt(int i){ 
    return new byte[]{ 
     (byte)i, 
     (byte)(i >> 8), 
     (byte)(i >> 16), 
     (byte)(i >> 24) 
    }; 
} 

Bien sûr, vous devez vous inquiéter de l'endian.

+0

se trouve également être multi-plateforme, ce qui précède fonctionne également en Java :) –

+0

Ouais lol, a dû implémenter une classe d'utilitaire avec un code similaire en Java afin que je puisse contrôler la conversion des octets = P –