public static byte[] AddPadding(byte[] data, int saveBits, int addBits, LeftRightPadding leftOrRightPadding) { bool[] sourceData = BinaryHelper.BytesToBits(data); bool[] removedResult = AddPadding(sourceData, saveBits, addBits); byte[] result = BinaryHelper.BitsToBytes(removedResult, leftOrRightPadding); return(result); }
/// <summary> /// Массив битов преобразуется в массив байтов 0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1 -> 0x01, 0x01 /// </summary> /// <param name="data"></param> /// <returns></returns> public static byte[] BitsToBytes(bool[] data, LeftRightPadding leftRightPadding) { List <byte> retval = new List <byte>(); List <bool> tmpData = new List <bool>(); List <bool> sourceData = new List <bool>(); #region Если количество бит не кратно 8, то дополняем массив старшими нулевыми битами до границы 8 бит чтобы было целое количество байтов int rest = data.Length % 8; if (rest > 0) { rest = 8 - rest; } if (leftRightPadding == LeftRightPadding.EmptyBitsAtLeft) // Добавляем нули слева - старшие биты { for (int i = 0; i < rest; i++) { sourceData.Add(false); } } #endregion sourceData.AddRange(data); #region Если количество бит не кратно 8, то дополняем массив младшими нулевыми битами до границы 8 бит чтобы было целое количество байтов if (leftRightPadding == LeftRightPadding.EmptyBitsAtRight) // Добавляем нули справа - младшие биты { for (int i = 0; i < rest; i++) { sourceData.Add(false); } } #endregion foreach (bool b in sourceData) { tmpData.Add(b); if (tmpData.Count == 8) { byte byte1 = (byte)ReadInteger(tmpData.ToArray(), 0, 8); retval.Add(byte1); tmpData.Clear(); } } return(retval.ToArray()); }