byte[] sample = new byte[]{10,20,30};
-THE 값은 6 비트이고, (오른쪽에서 왼쪽으로) 제 3 비트에서 시작바이트 배열에서 특정 위치의 비트 값을 가져 오는 방법은 무엇입니까?
새로운 바이트 [] {10,20,30}를 "00001010 00010100 00011110는"(같은 순서이어야 같다 이 그래서 "00001010 00010100 * 000,111 * 10" - 내 값은 Yaur) 움 (답 1에 기초하여 상기 용액 7
이다 필요) 순서 바이트 단지 방향
public static bool GetValue(byte[] data, int position)
{
var bytePos = data.Length - 1 - position/8;//right -> left
//var bytePos = position/8;//left -> right
var bitPos = position % 8;
return ((data[bytePos] & (1 << bitPos)) != 0);//right -> left
//return ((data[bytePos] & (1 << (7 - bitPos))) != 0); //left -> right
}
public static long GetValue(byte[] data, int position, int length)
{
if (length > 62)
{
throw new ArgumentException("not going to work properly with 63 bits if the first bit is 1");
}
long retv = 0;
for (int i = position + length - 1; i > position - 1; i--)
//for(int i = position;i<position+length;i++)//left -> right
{
if (GetValue(data, i)) retv |= 1;
retv = retv << 1;
}
retv = retv >> 1;
return retv;
}
변경된 비트
을 나는 당신의 질문은 매우 분명하다 생각하지 않습니다. 이 부분에서 의미하는 것을 더 설명 할 수 있습니까? "새 바이트 [] {10,20,30}은"1010 10100 11110 "이고 필요합니까 ..."? –
BitArray에는'.Copy (byte []) '함수가 없습니다. 그게'CopyTo'인가, 아니면 확장 메소드인가? –
바이트 인덱스를 찾으려면 8으로 나눕니다. 나머지는 해당 바이트 내의 비트 인덱스입니다. –