2010-10-12 20 views
7

¿Cómo convierto un int a dos bytes en C#?¿Cómo convierto un int a dos bytes en C#?

+0

¿Qué parte de la int? Dos bytes no son suficientes para codificar un valor entero entero de 32 bits. – dtb

+1

'int' requiere 4 bytes para el almacenamiento. ¿Desea perder la información en los MSB? –

+0

¿Quién el * bip * downvoted esto. Esta es una pregunta útil e interesante ya que la forma C de repente no funciona sin una buena razón en C# y las API obvias no existen (BitConverter es lento y * roto * de muchas maneras). – Joshua

Respuesta

11

Suponiendo que sólo quiere los bytes bajos:

byte b0 = (byte)i, 
    b1 = (byte)(i>>8); 

Sin embargo, desde 'int' es 'Int32' que deja 2 bytes más sin capturar.

+0

Esta es mi solución. Mucho más rápido que BitConverter. – Joshua

+5

@Joshua, hice un benchmarking rápido (Release build, 50000000 iterations, Stopwatch y prueba completa repetida dos veces para eliminar varios artefactos) y la diferencia entre crear una matriz y usar Bit-Masking vs. llamar a BitConverter es aproximadamente 1ns por llama a mi máquina Si elimina la creación de la matriz (solo obtenga los dos bytes), la diferencia es de aproximadamente 14ns. –

+0

No dudo de sus puntos de referencia. BitConverter es lento en comparación porque tiene que asignar matrices. Si puedo detectar previamente el tamaño de mi matriz para miles de enteros, puedo ahorrar una cantidad de tiempo no trivial. – Joshua

4

Puede usar BitConverter.GetBytes para obtener los bytes que comprenden un Int32. Habrá 4 bytes en el resultado, sin embargo, no

2.
2

Otra manera de hacerlo, aunque no tan elegante como otros métodos:

Int32 i = 38633; 
byte b0 = (byte)(i % 256); 
byte b1 = (byte)(i/256); 
2

¿Es un Int16?

Int16 i = 7; 
byte[] ba = BitConverter.GetBytes(i); 

Esto solo tendrá dos bytes.

Cuestiones relacionadas