¿Cuál es la mejor manera de dividir un entero de 32 bits en cuatro caracteres (sin signo) en C#.Conversión de entero de 32 bits a 4 caracteres
Respuesta
Quick'n'dirty:
int value = 0x48454C4F;
Console.WriteLine(Encoding.ASCII.GetString(
BitConverter.GetBytes(value).Reverse().ToArray()
));
Convertir el int a bytes, la inversión de la matriz de bytes para el orden correcto y luego conseguir la representación de caracteres ASCII de ella.
EDIT: el método Reverse es un método de extensión de .NET 3.5, solo para información. Invertir el orden de bytes también puede no ser necesario en su escenario.
Cheers, David
¿El objetivo final es simplemente imprimirlos en la consola? Si no, este método tiene una sobrecarga innecesaria, en comparación con las sugerencias de Jason y Sam. – Kip
@Kip: Sin embargo, esta es una forma más portátil de obtener bytes para más que enteros.Sin embargo, la solicitud es bastante extraña en primer lugar, ¿por qué querrías intentar codificar un número entero como caracteres, a menos que realmente quisiera decir bytes? –
@Kip: Como se mencionó en primer lugar, esta fue una respuesta rápida y sucia. Console.WriteLine fue solo para mí para obtener algún resultado y prueba de que está funcionando. La parte interesante es los métodos utilizados para lograr el objetivo. – VVS
No está claro si esto es realmente lo que quiere, pero:
int x = yourNumber();
char a = (char)(x & 0xff);
char b = (char)((x >> 8) & 0xff);
char c = (char)((x >> 16) & 0xff);
char d = (char)((x >> 24) & 0xff);
Esto supone que desea los bytes interpretados como el rango más bajo de caracteres Unicode.
consigue el 8-byte-bloques:
int a = i & 255; // bin 11111111
int b = i & 65280; // bin 1111111100000000
se rompen los tres primeros bytes hacia abajo en un solo byte, sólo les dividir por el número adecuado y realizar otra lógica y para obtener su último byte.
Editar: La solución de Jason con los cambios de bits es mucho más agradable, por supuesto.
Char? ¿Tal vez estás buscando esta práctica función de ayuda pequeña?
Byte[] b = BitConverter.GetBytes(i);
Char c = (Char)b[0];
[...]
BitConverter
.NET utiliza Unicode, un char es de 2 bytes no 1
Para convertir entre los datos binarios que contienen texto no Unicode utilizar la clase System.Text.Encoding .
Si usted quiere 4 bytes y caracteres no sustituirán al carbón con el byte en la respuesta de Jason
Solo para aclarar: .net usa Unicode codificado como UCS-2 (ergo los 2 bytes). – tzot
He probado algunas de las formas y cronometrado el tiempo necesario para convertir 1000000 enteros.
método de conversión incorporada, 325000 garrapatas:
Encoding.ASCII.GetChars(BitConverter.GetBytes(x));
conversión del puntero, 100000 garrapatas:
static unsafe char[] ToChars(int x)
{
byte* p = (byte*)&x)
char[] chars = new char[4];
chars[0] = (char)*p++;
chars[1] = (char)*p++;
chars[2] = (char)*p++;
chars[3] = (char)*p;
return chars;
}
Bitshifting, 77000 garrapatas:
public static char[] ToCharsBitShift(int x)
{
char[] chars = new char[4];
chars[0] = (char)(x & 0xFF);
chars[1] = (char)(x >> 8 & 0xFF);
chars[2] = (char)(x >> 16 & 0xFF);
chars[3] = (char)(x >> 24 & 0xFF);
return chars;
}
- 1. conversión de entero de 32 bits sin signo (big endian) a largo y volver
- 2. Conversión de punto flotante de 32 bits a 16 bits
- 3. conversión de aplicación .NET 32 bits a 64 bits
- 4. Asignar un flotador de 32 bits a un entero de 32 bits
- 5. encasillamiento Implícito en C (conversión de 32 bits sin signo de 8 bits a T int)
- 6. Conversión de caracteres sin signo a entero con signo
- 7. 64 bits por división de 32 bits
- 8. ¿Cómo declaro un entero de 32 bits en Java?
- 9. Cómo convertir un entero de 32 bits de unsigned a firmado en MySQL o PHP?
- 10. multiplicación SSE de 4 enteros de 32 bits
- 11. Conversión de cadena a entero
- 12. Conversión de Entero, a BigInteger
- 13. Convertir cadena md5 de 32 caracteres en entero
- 14. C++: ¿Es seguro comparar un número entero de 64 bits con un número entero de 32 bits?
- 15. Fortran: entero * 4 vs entero (4) vs entero (tipo = 4)
- 16. Encontrar posiciones de bits en un entero de 32 bits sin signo
- 17. Arreglo rápido de 24 bits -> conversión de matriz de 32 bits?
- 18. Determinación de Windows de 64 bits frente a 32 bits
- 19. conversión de Campo de Bits a int
- 20. Operador bit a bit para obtener bytes de 32 bits
- 21. Diferencia entre "Mi Mac de 32 bits" y "Mi Mac de 64 bits" en Xcode 4?
- 22. Compatibilidad con Java de 32 bits frente a 64 bits
- 23. Puerto 32 bits Controlador de Windows a 64 bits Windows
- 24. Función de conversión de entero a real
- 25. Erlang cadena bits a conversión entera
- 26. Diferencias entre aplicaciones de .NET (4) de 32 y 64 bits
- 27. conversión de coma flotante a punto fijo de 32 bits en Java
- 28. no se puede asignar un valor a entero de 64 bits en la plataforma 32-bit
- 29. Python, cómo poner entero de 32 bits en matriz de bytes
- 30. Ruby - Conversión de entero a cadena
Lo que se puede esperar de los caracteres ¿ser? ¿Interpretación ASCII de los bytes? –
¿Te refieres a caracteres o bytes? Los caracteres son caracteres individuales de texto en una codificación dada, que pueden corresponder a múltiples bytes, probablemente no lo que usted desea. –