2014-05-24 11 views
0

숫자 1과 4는 내 값을 나타냅니다 (이 숫자는 -1).이 숫자를 내 바이트에 삽입하여 00 00 00 01 일 필요가 있습니다. 시도하고 결과가 10 00 00 00입니다있다 :숫자를 4 바이트에 삽입하는 방법

array[Index + 2] = (byte)(num & 0xFF); 
array[Index + 3] = (byte)((num>> 8) & 0xFF); 
array[Index + 4] = (byte)((num>> 16) & 0xFF); 
array[Index + 5] = (byte)((num>> 24) & 0xFF); 

나는 것입니다 도움이

답변

1

이 당신이 원하는 무엇을위한 기쁘다.

array[Index + 5] = (byte)(num & 0xFF); 
array[Index + 4] = (byte)((num>> 8) & 0xFF); 
array[Index + 3] = (byte)((num>> 16) & 0xFF); 
array[Index + 2] = (byte)((num>> 24) & 0xFF); 

num & 0xFF 먼저 우측 제

1

약간 변환기 사용한 것 이외는 0 모든 비트를 만들 것이다

byte[] numberToByteArray = BitConverter.GetBytes(1); 

하나 numberToByteArray에 최하위 셀 될 것이다 [0] 즉, 00 00 00 01입니다. , 01 00 00 00

+0

바이트 순서는 어떻습니까? –

+0

바이트 순서를 표시하기 위해 회신을 조금 편집했습니다. – PiotrWolkowski

+2

이것은 또한 이식 가능하지 않습니다. 'BitConverter'는 실행중인 CPU의 엔디안에 따라 다른 값을 반환합니다. 크로스 플랫폼을 사용하려면'BitConverter.IsLittleEndian'을 확인하십시오. – Mitch

0

귀하의 예는 일반적으로, 혼합 것으로 보인다 : 그것은 그 결과의 반전 후

byte[] reversedResult = numberToByteArray.Reverse().ToArray(); 

: 결과를 리버스 -

당신은 [3] 대신에 값이 numberToByteArray에 있어야합니다 십진수 1을 나타내려면 00 00 00 01 (빅 엔디안), 01 00 00 00 (리틀 엔디안) 또는 00 01 00 00 (중간 엔디안) 중 하나가됩니다. 네가 가진 것은 중간 엔디안과 비슷하지만 바이트 수준이다.

당신은 니블 직접 플립해야합니다 :

var Index = 0; 
var array = new byte[7]; 
var num = 0x87654321; 

var t = num; 
array[Index + 2] = (byte)((t & 0xF) << 4 | (t & 0xf0) >> 4); t >>= 8; 
array[Index + 3] = (byte)((t & 0xF) << 4 | (t & 0xf0) >> 4); t >>= 8; 
array[Index + 4] = (byte)((t & 0xF) << 4 | (t & 0xf0) >> 4); t >>= 8; 
array[Index + 5] = (byte)((t & 0xF) << 4 | (t & 0xf0) >> 4); 

Console.Writeline("{0:X2} {1:X2} {2:X2} {3:X2}", array[2], array[3], array[4], array[5]); 
// prints: 12 34 56 78 

편집 :를이 빅 엔디안으로 당신이 찾고 있다면, 다음 햄릿 코비안의 대답은 적절하다.

관련 문제