2009-05-29 8 views
0

Je souhaite convertir un fichier binaire en un tableau de caractères ASCII. Comment puis je faire ça . merci.Comment convertir un fichier binaire en un ensemble de caractères ascii

+0

Plus d'informations s'il vous plaît? –

+0

Je suppose que vous parlez seulement des caractères imprimables. Les 256 caractères ASCII ne sont pas tous imprimables. –

+0

Les questions me rappelle http://en.wikipedia.org/wiki/File:Bird_converted_to_ASCII_characters.png – tanascius

Répondre

4

Cela dépend de ce que vous voulez faire avec. Ascii est supposé être 7bits (0-127 sont bien définis, les autres caractères dépendent de la page de code). L'encodage ASCII peut donc générer de mauvaises surprises (parmi lesquelles des caractères non imprimables comme des valeurs nulles ...)

Si vous voulez imprimer quelque chose de votre tableau d'octets, vous ne devriez pas les convertir avec un encodage ASCII. Vous feriez mieux de l'encoder en Base64, qui est un moyen sûr (quoique pas trop optimal en termes de taille) d'encoder des binaires dans des chaînes.

Pour encoder vos octets en base64, vous pouvez simplement aller avec:

string result = System.Convert.ToBase64String(yourByteArray); 
+0

True, bien que la conversion de la chaîne Base64 à ASCII sera sûr et ne donnera que des caractères imprimables. – PeterAllenWebb

0

Vous pouvez lire chaque caractère et le convertir en caractère. Cela convertirait chaque octet en caractère ascii. Est-ce ce que vous cherchez à faire?

2

Extrayez BASE64 ou UUEncoding. Je suppose que vous ne voulez utiliser que des caractères imprimables de l'ensemble ASCII à 256 caractères.

BASE64 utilise seulement 64 caractères (parfois cela est utilisé lors de l'envoi binaire par e-mail par exemple). Cela provoque la croissance de la production - quelque chose que vous devez prendre en compte dans votre situation.

+0

Oui, et il est simple de le faire en C# avec Convert.ToBase64String() – PeterAllenWebb

1
StreamReader reader = new StreamReader("pathtoyourbinaryfile", System.Text.Encoding.ASCII); 
char[] text = reader.ReadToEnd().ToCharArray(); 
0

Je ne crois pas que les intervenants précédents ont répondu à la question. Beaucoup de gens disent ASCII quand ils veulent dire byte donc je soupçonne que le questionneur voulait lire un fichier binaire et non un fichier texte avec des caractères codés.

Pour démontrer l'impact des différentes techniques que je crée un fichier texte UTF-8 de la chaîne suivante:

string s = "\ta£\x0394\x221A"; // tab; lower case a; pound sign; Greek delta; square root 

Le programme suivant lit ce fichier d'abord comme une chaîne de texte puis comme un tableau d'octets. Dans chaque cas, l'entrée est d'abord affichée en décimal, puis en hexadécimal.

String test = ""; 
    String fileStg = File.ReadAllText("Test.txt"); 
    for (int i = 0; i < fileStg.Length; i++) 
    test += (int)fileStg[i] + " "; 
    Debug.Print(test); 
    test = ""; 
    for (int i = 0; i < fileStg.Length; i++) 
    test += ((int)fileStg[i]).ToString("X") + " "; 
    Debug.Print(test); 
    test = ""; 
    Byte[] fileByte = File.ReadAllBytes(pathProg + "Test.txt"); 
    for (int i = 0; i < fileByte.Length; i++) 
    test += fileByte[i].ToString() + " "; 
    Debug.Print(test); 
    test = ""; 
    for (int i = 0; i < fileByte.Length; i++) 
    test += fileByte[i].ToString("X") + " "; 
    Debug.Print(test); 

Sortie:

9 97 163 916 8730 13 10 
9 61 A3 394 221A D A 
239 187 191 9 97 194 163 206 148 226 136 154 13 10 
EF BB BF 9 61 C2 A3 CE 94 E2 88 9A D A 

Notez que lors de la lecture dans un fichier texte, la nomenclature a été dépouillé et UTF-8 caractères multi-octets sont devenus des caractères simples dans la chaîne d'entrée. Mais lorsqu'il est lu comme un tableau d'octets, je reçois la nomenclature et l'UTF-8 brute. Je suppose que le questionneur voulait lire un vrai fichier binaire plutôt qu'un fichier texte Unicode mais je crois que cet exemple illustre mieux les effets des deux techniques et démontre que si le questionneur souhaite lire un fichier binaire, ReadAllBytes est le technique plus appropriée.

Questions connexes