2009-10-29 4 views
3

바이트 []에 파일을로드하는 중입니다. 내 이해에 의해 바이트 [] 바이트 (8 비트) 특정 요소가 있어야합니다. 내가 각 바이트를 인쇄 할 때, 그것들 모두는 8 비트가 아니다 (즉, 길이가 8이 아니다). 내 코드 :C# 바이트 문제 [

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)); 
} 

출력 :이 실종 곳

10001110 
11101011 
10001100 
1000111 
10011010 
10010011 
1001010 
11000000 
1001001 
100100 

나는 나의 이해는 여기에 잘못된 생각, 당신은 알려주세요 (또는 좀 튜토리얼 링크를 제공) 주시겠습니까.

+4

'바이트 [] 데이터 =의 File.ReadAllBytes (@ "FilePath.jpg을");. ' –

답변

13

숫자를 문자열로 변환 할 때 앞에 0이 없어집니다. (당신의 모든 항목이 "1"로 시작합니다.) 당신은에 다시 넣어 PadLeft을 사용할 수 있습니다

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

감사합니다.이 부분은 내가 빠뜨린 부분입니다. (나는 C#에 대해 모호한 지식을 가지고 있습니다.) –

+0

PadLeft (8, Convert.ToChar ("0")) 대신 PadLeft (8, '0')를 사용하십시오. 매번 문자열을 char로 변환하는 의미가 없습니다. – Kevin

+0

이봐, 너 모두 내가 "수정 된"코드를 작성하고 테스트 할 시간을 보았 기 때문에 대답에 이겼다. "그래도 정확하게 대답 한 모든 사람에게 + – David

18

선행 0은 인쇄되지 않습니다.

+0

당신이이 단순한 반응에서 얻은 "사랑"은 놀랍습니다. (내 부분에 대한 질투가없고, 현명하게도 우리는 200을 더한 것입니다.)하지만 우스운 이야기는 아닙니다. 이 간단한 질문에 대해 많은 담당자를 얻으시겠습니까? – mjv

+0

@mvj - 농담이 아닙니다! 그러나 나는 질투심이 많다. 그러나 그것을 다루기에는 충분히 크다. (이를 드러내고 웃다). – David

+0

@mjv 가장 많이 대답하는 답변이 대개 가장 쉽습니다. 전문 지식, 많은 참고 문헌 등이 포함 된 질문은 답변이 맞는지 아닌지를 아는 사람이 거의 없기 때문에 투표를 몇 번 이상받는 경우는 드뭅니다. 아마 mmyers에 대해서도 똑같은 편이라. 그가 쉬운 선수 일지라도 대표를 영입하게되어 기쁘다. –

3

간단히 앞에 0이 포함되지 않습니다.

2

앞에 0이없는 바이트가 있습니까? 우리는 표시하는 십진수 값을 모르기 때문에 나쁜 예를 선택했습니다. (.jpg 파일의 헤더 구조를 아는 사람이 알 수 있습니다.) 선행 0이 이진 동등 물에 표시되지 않습니다.

4

이들은 모두 8 비트이지만 중요하지 않은 0 (왼쪽의 0)은 인쇄되지 않습니다.