Quelle est la meilleure façon de diviser un entier de 32 bits en quatre caractères (non signés) en C#.Conversion de l'entier 32 bits à 4 caractères
Répondre
quick'n'dirty:
int value = 0x48454C4F;
Console.WriteLine(Encoding.ASCII.GetString(
BitConverter.GetBytes(value).Reverse().ToArray()
));
Conversion int en octets, en inversant l'octet tableau pour l'ordre correct et obtenir la représentation de caractères ASCII de celui-ci.
EDIT: la méthode Reverse est une méthode d'extension de .NET 3.5, juste pour info. Inverser l'ordre des octets peut également ne pas être nécessaire dans votre scénario.
Cheers, David
Est-ce que le but ultime est de les imprimer sur la console? Sinon, cette méthode a beaucoup de frais inutiles, par rapport aux suggestions de Jason et Sam. – Kip
@Kip: C'est une manière plus portable d'obtenir les octets pour plus que des entiers.La requête est plutôt étrange en premier lieu, cependant - pourquoi voudriez-vous essayer d'encoder un nombre entier en tant que caractères - à moins qu'il ne voulait vraiment dire des octets? –
@Kip: Comme mentionné en premier lieu, c'était une réponse rapide et sale. Console.WriteLine était juste pour moi d'obtenir une sortie et la preuve que ça fonctionne. La partie intéressante est les méthodes utilisées pour atteindre l'objectif. – VVS
On ne sait pas si cela est vraiment ce que vous voulez, mais:
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);
Ce suppose que vous voulez les octets interprétés comme la plage la plus basse de caractères Unicode.
contractent le 8 octets blocs:
int a = i & 255; // bin 11111111
int b = i & 65280; // bin 1111111100000000
Ne pas briser les trois premiers octets vers le bas dans un seul octet, il suffit de les diviser par le nombre approprié et effectuer une autre logique et pour obtenir votre dernier octet. Edit: La solution de Jason avec les bitshifts est bien plus agréable bien sûr.
Char? Peut-être que vous cherchez cette petite fonction d'aide pratique?
Byte[] b = BitConverter.GetBytes(i);
Char c = (Char)b[0];
[...]
BitConverter
.net utilise Unicode, char est de 2 octets non 1
Pour convertir des données binaires contenant du texte non-unicode utiliser la classe System.Text.Encoding .
Si vous ne voulez pas 4 octets et caractères remplacent puis le char est l'octet dans la réponse de Jason
Juste pour clarifier: .net utilise Unicode codé comme UCS-2 (ergo les 2 octets). – tzot
Je l'ai essayé quelques moyens et cadencé le temps nécessaire pour convertir 1000000 ints.
méthode de conversion intégré, 325000 tiques:
Encoding.ASCII.GetChars(BitConverter.GetBytes(x));
conversion de pointeur, 100000 tiques:
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;
}
opérateurs de bits, 77000 tiques:
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. Appel code 32 bits à partir de 64 bits Processus
- 2. Exécution de l'application 32 bits à l'aide de com 32 bits sur une machine Windows 64 bits
- 3. Dev .NET 32 bits par rapport à 64 bits prod
- 4. SHGetFolderPath() 32 bits par rapport à 64 bits
- 5. Application java 64 bits à utiliser 32 bits dll
- 6. L'iPhone OS 64 bits ou 32 bits?
- 7. Chargement PNG 32 bits dans .NET
- 8. Mélange de code 32 bits et 16 bits avec nasm
- 9. Détermination de Windows 64 bits vs 32 bits
- 10. Paramètres PostMessage de C# à 32 bits C++
- 11. directive C# pour indiquer 32 bits ou 64 bits construire
- 12. Compiler le projet 32 bits VS 2003 en 64 bits
- 13. Chargement d'un processus 32 bits dans un environnement 64 bits
- 14. Les 32 bits les plus significatifs perdus lors de la conversion du pointeur en int64_t
- 15. Détection d'un jre 64 bits dans un navigateur 32 bits?
- 16. Sérialisation binaire .NET entre OS 32 bits et 64 bits
- 17. Construire 32 bits avec llvm-gcc 64 bits
- 18. Impossible d'exécuter les applications 32 bits sur Linux 64 bits
- 19. Changer l'environnement de développement de Asp.net 2.0 32 bits à 64 bits
- 20. C# - Existe-t-il une bibliothèque mathématique flottante 32 bits?
- 21. . Console app 32 vs 64 bits
- 22. Est-il possible de détecter 32 bits par rapport à 64 bits dans un script bash?
- 23. Comment forcer MSBuild à compiler en mode 32 bits?
- 24. Forcer HTTPD Apache à fonctionner en 32 bits
- 25. Modification du type de variable 32 bits en variable 64 bits?
- 26. Force VM à lancer en mode 32 bits WebStart JNLP
- 27. Conversion de caractères de clavier
- 28. Comment puis-je convertir quatre caractères en un flottant IEEE-754 32 bits en Perl?
- 29. Conversion de macros Excel 4 en VBA
- 30. Utilisation d'un pilote 64 bits à partir d'une application 32 bits
Que voulez-vous attendre les caractères être? Interprétation ASCII des octets? –
Voulez-vous dire chars ou octets? Les caractères sont des caractères individuels de texte dans un codage donné, ce qui peut correspondre à plusieurs octets - probablement pas ce que vous voulez. –