Comment convertir une chaîne telle que "01110100011001010111001101110100" en un tableau d'octets, puis utiliser File.WriteAllBytes de sorte que la chaîne binaire exacte soit le binaire du fichier. Dans ce cas, ce serait le "test" du texte.Conversion d'une représentation de chaîne binaire en tableau d'octets
Répondre
Dans le cas où vous n'avez pas ce fétiche LINQ, si commun ces derniers temps, vous pouvez essayer la voie normale
string input ....
int numOfBytes = input.Length/8;
byte[] bytes = new byte[numOfBytes];
for(int i = 0; i < numOfBytes; ++i)
{
bytes[i] = Convert.ToByte(input.Substring(8 * i, 8), 2);
}
File.WriteAllBytes(fileName, bytes);
LINQ est grande, mais il Il doit y avoir des limites.
Beaucoup plus compréhensible – jwsample
Cela suppose que la longueur de la chaîne est un multiple de 8 ... Mais vous avez raison, c'est probablement plus facile à comprendre de cette façon. Je suppose que je suis totalement accro à LINQ;) –
Hmm. Je dirais que le LINQ est plus compréhensible. Il décrit de manière concise ce qui est fait sans décrire les étapes (bruyantes) pour atteindre cet objectif. Il a un rapport contenu/bruit beaucoup plus élevé. – spender
Vous pouvez commencer par diviser la chaîne en une séquence de chaînes de 8 caractères, puis convertir ces chaînes en octets, et éventuellement écrire les octets dans un fichier
string input = "01110100011001010111001101110100";
var bytesAsStrings =
input.Select((c, i) => new { Char = c, Index = i })
.GroupBy(x => x.Index/8)
.Select(g => new string(g.Select(x => x.Char).ToArray()));
byte[] bytes = bytesAsStrings.Select(s => Convert.ToByte(s, 2)).ToArray();
File.WriteAllBytes(fileName, bytes);
EDIT: Voici une autre façon de diviser la chaîne en morceaux de 8 caractères, peut-être un peu plus simple:
int nBytes = (int)Math.Ceiling(input.Length/8m);
var bytesAsStrings =
Enumerable.Range(0, nBytes)
.Select(i => input.Substring(8 * i, Math.Min(8, input.Length - 8 * i)));
Si vous savez que la longueur de la chaîne est un multiple de 8, vous pouvez le rendre encore plus simple:
int nBytes = input.Length/8;
var bytesAsStrings =
Enumerable.Range(0, nBytes)
.Select(i => input.Substring(8 * i, 8));
Vous venez de tomber dans cette question. Un beau problème de jouet ... bon pour une interview. Je pensais que j'essaierais avant de lire les réponses. Correspond à votre deuxième approche pratiquement terme pour terme. Moi aussi je suis accro à LINQ! +1 – spender
Les autres réponses vous ont couvert, mais juste pour le plaisir j'ai écrit le contraire. Allant de la chaîne à la ascii représentation binaire:
private static string StringToAsciiBin(string s)
{
string output = "";
foreach (char c in s.ToCharArray())
{
for (int i = 128; i >= 1; i /=2)
{
if (((int)c & i) > 0)
{
output += "1";
}
else
{
output += "0";
}
}
}
return output;
}
Vous voudriez passer d'un tableau d'octets à la représentation binaire. Un char est un type de données 16 bits, donc vous couper les huit premiers bits de chaque code de caractère. De même, n'utilisez pas + = pour construire une chaîne, elle est terriblement mauvaise, utilisez un StringBuilder à la place. – Guffa
Un peu en retard, mais voici mes 2 cents:
var binaryStr = "01110100011001010111001101110100";
var byteArray = Enumerable.Range(0, int.MaxValue/8)
.Select(i => i*8)
.TakeWhile(i => i < binaryStr.Length)
.Select(i => binaryStr.Substring(i, 8))
.Select(s => Convert.ToByte(s, 2))
.ToArray();
File.WriteAllBytes("C:\temp\test.txt", byteArray);
En fait, la réponse par @Maciej est inexact. Comme @ Phate01 a remarqué le numOfBytes
est correct seulement pour la longueur d'entrée qui est une puissance de 8
. La deuxième chose est que le tableau d'octets devrait être rempli de n
à 0
index pas l'inverse. Voici l'exemple de code:
var bits = "000011110000001000";
var numOfBytes = (int)Math.Ceiling(bits.Length/8m);
var bytes = new byte[numOfBytes];
var chunkSize = 8;
for (int i = 1; i <= numOfBytes; i++)
{
var startIndex = bits.Length - 8 * i;
if (startIndex < 0)
{
chunkSize = 8 + startIndex;
startIndex = 0;
}
bytes[numOfBytes - i] = Convert.ToByte(bits.Substring(startIndex, chunkSize), 2);
}
Cela peut être amélioré pour se débarrasser de la if
statetment mais sous cette forme, il est plus compréhensible.
- 1. Comment convertir une représentation binaire d'une chaîne en une chaîne?
- 2. Conversion Python de chaîne binaire en hexadécimal
- 3. conversion de chaîne entre représentation UTF-8 et représentation unicode
- 4. Conversion binaire en chaîne puis retour au binaire
- 5. Python: conversion de chaîne binaire/hexadécimale?
- 6. C++ Conversion d'une valeur binaire en octets en une chaîne
- 7. division par 2 en chiffre binaire signé (représentation binaire redondante)
- 8. Comparaison en représentation binaire redondante RBR
- 9. Conversion de XPathDocument en chaîne
- 10. C# - Conversion de données de chaîne en représentation de chaîne réelle
- 11. Représentation binaire d'un .NET Decimal
- 12. Conversion d'un octet en chaîne binaire dans C#
- 13. C# tableau binaire en décimal?
- 14. Conversion d'IOstream binaire en fichier
- 15. 2d représentation de tableau
- 16. Conversion de chaîne en tableau d'octets en C# (CSV)
- 17. tableau binaire en python
- 18. Représentation de base-2 (binaire) en utilisant Python
- 19. tableau de conversion des paramètres de la forme en chaîne
- 20. Plus de conversion Pythonic en binaire?
- 21. Conversion de la source en binaire
- 22. C# binaire en chaîne
- 23. Question sur la conversion décimal en binaire en hexadécimal
- 24. Conversion d'une date à partir d'une représentation sous forme de chaîne en une représentation numérique et retour
- 25. représentation chaîne de petites quantités d'argent
- 26. (Java) Spécifie le nombre de bits (longueur) lors de la conversion d'un nombre binaire en chaîne?
- 27. Convertir une représentation hexadécimale à l'intérieur d'une chaîne en équivalent binaire
- 28. Comment convertir la représentation décimale d'une adresse IP en binaire?
- 29. Conversion de tableau double en tableau IComparable
- 30. Conversion d'un nombre décimal en binaire
Voici un bon point de départ: http://msdn.microsoft.com/fr-fr/library/system.convert_methods.aspx – NullUserException