2014-02-07 2 views
9

내가 변환 BYTE 배열은

static void Main(string[] args) 
{ 
    byte[] array = new byte[2] { 0x00, 0x1f }; 
    Console.WriteLine(BitConverter.ToInt32(array, 0)); 
} 

가 작동하지 않습니다하지만 코드

의 종류가 INT합니다.

대상 배열이 컬렉션의 모든 항목을 복사하는 데 충분하지 않습니다. 배열 인덱스와 길이를 확인하십시오.

무엇이 잘못 되었나요?

+0

BitConverter. ** ToInt32 ** –

답변

11

이름에서 알 수 있듯이 Int32은 32 비트 또는 4 바이트이므로 바이트 배열을 Int32으로 변환하려면 길이가 4 이상이어야합니다 (또는 더 정확하게 필요합니다). 시작 위치 다음에 최소 4 바이트가 있어야 함).

두 개가 모두 2 바이트이면 ToInt16을 사용하셨습니까?

4

BitConverter.ToInt32documentation 말한다 :

ToInt32 방법은 Int32 값에 변수 startIndex + 3의 인덱스에서 시작 인덱스 바이트를 변환한다.

당신은 적어도 4 바이트를 지정해야합니다,하지만 당신은 단지 Int32은 4 바이트로 구성하지만, 배열은 첫째로 변환하는 것입니다이 문제를 해결하기 위해 2 가지 방법을 가지고 있습니다 2.

5

Int16 다음 번호가 동일하게 인쇄 때문에 Int16에서 Int32로 변환이 특정 사용에 아무 것도 변경하지 않습니다

Console.WriteLine((Int32)(BitConverter.ToInt16(array, 0))); 

Int32합니다.

+0

십진수 "10"을 "0010"으로 쓰는 것만으로는 아무것도 바뀌지 않습니다 : 추가 0은 의미가 없으며 Int16을 Int32. – Andrejovich