public byte[] ConvertBinstrToBytes(string binarySequence, IncompleteSegmentBehavior behavior = IncompleteSegmentBehavior.Skip)
 {
     var segmentSize = sizeof(byte) * 8;
     var sequenceLength = binarySequence.Length;
     var numberOfBytes = (int)Math.Ceiling((double)sequenceLength / segmentSize);
     var bytes = new byte[numberOfBytes];
         
     for (int i = 0; i < numberOfBytes; i++)
     {
         var charactersLeft = sequenceLength - i * segmentSize;
         var segmentLength = (charactersLeft < segmentSize ? charactersLeft : segmentSize);
         var segment = binarySequence.Substring(i * segmentSize, segmentLength);
         if (charactersLeft < segmentSize)
         {
             segment = HandleIncompleteSegment(segment, segmentSize, behavior);
             if (segment == null)
                 continue;
         }
         bytes[i] = ConvertBinstrToByte(segment);
     }
     return bytes;
 }
 private string HandleIncompleteSegment(string segment, int segmentSize, IncompleteSegmentBehavior behavior)
 {
     string result = null;
     var zeroAppender = new StringBuilder();
     for (int i = 0; i < segmentSize - segment.Length; i++)
         zeroAppender.Append('0');
     var zeros = zeroAppender.ToString();
     switch (behavior)
     {
         case IncompleteSegmentBehavior.Skip:
             break;
         case IncompleteSegmentBehavior.ZerosToStart:
             result = zeros + result;
             break;
         case IncompleteSegmentBehavior.ZerosToEnd:
             result = result + zeros;
             break;
         default:
             break;
     }
     return result;
 }