dev-lang

[C#] BitArray

검은바람 2022. 1. 10. 14:07
반응형
/// <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;
}
반응형