2009-10-29 5 views
3

Je charge un fichier dans un octet []. D'après ce que je comprends, le byte [] devrait contenir des éléments spécifiques d'octets (8 bits). Lorsque j'imprime chaque octet, tous ne sont pas 8 bits (c'est-à-dire qu'ils n'ont pas la longueur de 8). Mon code:Problème C# avec octet []

FileStream stream = File.OpenRead(@"C:\Image\Img.jpg"); 
byte[] fileByte = new byte[stream.Length]; 
stream.Read(fileByte, 0, fileByte.Length); 

for (int i = 0; i <= fileByte.Length - 1; i++) 
{ 
    Console.WriteLine(Convert.ToString(fileByte[i], 2)); 
} 

Sortie:

10001110 
11101011 
10001100 
1000111 
10011010 
10010011 
1001010 
11000000 
1001001 
100100 

Je pense que ma compréhension ne va pas ici, Pouvez-vous s'il vous plaît laissez-moi savoir (ou me donner quelques liens tutoriel) où je suis absent ce.

+4

'octet [] = données File.ReadAllBytes (@ "FilePath.jpg");.' –

Répondre

13

Lors de la conversion d'un numérique en chaîne, vous perdez les zéros en tête. (Notez que toutes vos entrées commencent par "1".) Vous pouvez utiliser PadLeft pour les remettre dans

FileStream stream = File.OpenRead(@"C:\Image\Img.jpg"); 
    byte[] fileByte = new byte[stream.Length]; 
    stream.Read(fileByte, 0, fileByte.Length); 

    for (int i = 0; i <= fileByte.Length - 1; i++) 
    { 
     Console.WriteLine(Convert.ToString(fileByte[i], 2).PadLeft(8,'0')); 

    } 
+0

Merci, c'est la partie qui me manquait. (Je n'ai qu'une vague connaissance de C#.) –

+0

Au lieu de PadLeft (8, Convert.ToChar ("0")), faites simplement PadLeft (8, '0'). Aucun sens de convertir la chaîne en un caractère à chaque fois. – Kevin

+0

Man, vous m'avez tous battu à la réponse parce que j'ai pris le temps d'écrire et de tester le code "correctif". "Encore, + à tous ceux qui ont répondu correctement – David

18

Les 0 premiers ne sont pas imprimés.

+0

Incroyable, tout l'amour que vous obtenez de cette réponse simple ... (pas de jalousie de ma part, vous nous battez tous les temps sages, plus je suis 200 pour la journée), mais n'est-ce pas drôle quand nous obtenir autant de représentants pour ces questions simples? – mjv

+0

@mvj - Sans blague! Mais je suis jaloux. Mais assez grand pour y faire face. (sourire). – David

+0

@mjv mes réponses rep les plus élevées ont généralement été les plus faciles à répondre. Les questions impliquant des connaissances spécialisées, beaucoup de références, etc. obtiennent rarement plus de quelques voix, simplement parce que si peu savent si la réponse est correcte ou non. Probablement la même chose pour les mmyers et je suis sûr qu'il est heureux de prendre le représentant même si c'est pour un facile. –

3

Il est tout simplement que les zéros ne sont pas inclus ...

2

sont-octets sans des zéros? Vous avez un peu choisi un mauvais exemple parce que nous ne connaissons pas les valeurs décimales que vous affichez (ok peut-être quelqu'un qui connaît la structure d'en-tête pour un fichier .jpg sait). Je suis prêt à parier que les zéros en tête ne sont pas affichés dans les équivalents binaires.

4

Ils ont tous 8 bits, mais les zéros non significatifs (les zéros à gauche) ne sont pas imprimés.