반응형
/// <summary>
/// BitArray 카운터
/// </summary>
/// <param name="bitArray">+1 bit 할 BitArray</param>
/// <returns>+1 bit 된 BitArray</returns>
public BitArray BitPlus(BitArray bitArray)
{
BitArray result = new BitArray(bitArray.Count, false);
bool isFinish = false;
// 최대값까지 왔다면 0으로 리턴
if (bitArray == _currentLVDS._maxPattern3)
{
return result;
}
for (int i = 0; i < bitArray.Count; i++)
{
if (isFinish)
{
result.Set(i, bitArray.Get(i));
}
else
{
if (bitArray.Get(i))
{
result.Set(i, false);
if (i < bitArray.Count - 1)
{
if (bitArray.Get(i + 1))
{
result.Set(i + 1, true);
}
}
}
else
{
result.Set(i, true);
isFinish = true;
}
}
}
return result;
}
/// BitArray to bite[]
private byte[] BitArrayToByteArray(BitArray bits)
{
int numBytes = bits.Count / 8;
if (bits.Count % 8 != 0) numBytes++;
byte[] bytes = new byte[numBytes];
int byteIndex = 0;
int bitIndex = 0;
for (int i = 0; i < bits.Count; i++)
{
//if (bits[i]) bytes[byteIndex] |= (byte)(1 << (7 - bitIndex));
if (bits[i]) bytes[byteIndex] |= (byte)(1 << bitIndex);
bitIndex++;
if (bitIndex == 8)
{
bitIndex = 0;
byteIndex++;
}
}
Array.Reverse(bytes);
return bytes;
}
반응형