private bool ValidateBinary(BinaryString binary)
        {
            bool          valid     = false;
            List <string> prefixes  = GeneratePrefixes(binary.Name);
            var           countCero = binary.Name.Count(x => x == '0');
            var           countOne  = binary.Name.Count(x => x == '1');

            var validPrefixes = true;

            foreach (var prefix in prefixes)
            {
                var prefixCountCero = prefix.Count(x => x == '0');
                var prefixCountOne  = prefix.Count(x => x == '1');
                if (prefixCountOne < prefixCountCero)
                {
                    validPrefixes = false;
                }
            }

            if ((countCero == countOne) && validPrefixes)
            {
                valid = true;
            }
            return(valid);
        }
        public void FindEndOfLine_ContainsBoth_ShouldReturnFirstIndex(int length, int position)
        {
            // Arrange.
            var data = new byte[length];

            data[position + 0] = Character.CarriageReturn;
            data[position + 1] = Character.LineFeed;

            switch (length - position)
            {
            case 4:
                data[position + 3] = Character.LineFeed;
                goto case 3;

            case 3:
                data[position + 2] = Character.CarriageReturn;
                break;
            }

            var subject = new BinaryString(data);

            // Assert.
            subject.FindEndOfLine().Should().Be((position, EndOfLine.Both));
            subject.FindEndOfLine(position).Should().Be((position, EndOfLine.Both));
        }
示例#3
0
        public string Assemble(string hexString)
        {
            var binary      = new HexString(hexString).ToBinaryString();
            var instruction = GetInstruction(binary);

            var bitIndex = 0;
            var syntax   = instruction.Syntax.First();

            foreach (var instructionArg in instruction.Args)
            {
                var argBinary = new BinaryString(binary.Value
                                                 .Substring(bitIndex, instructionArg.Size));

                var syntaxArg = GetSyntaxArgByBinary(instructionArg.Value, argBinary);

                if (syntaxArg != null)
                {
                    syntax = syntax.Replace(instructionArg.Value, syntaxArg);
                }

                bitIndex += instructionArg.Size;
            }

            return(syntax.ToLower());
        }
        public void GetEnumerator_WithNonNullInstance_ShouldReturnEnumeratorWithCorrectOrder(int length)
        {
            // Arrange.
            var data = new byte[length];

            using (var random = RandomNumberGenerator.Create())
            {
                random.GetBytes(data);
            }

            var subject = new BinaryString(data);

            // Assert.
            Assert(subject.GetEnumerator());
            Assert(((IEnumerable)subject).GetEnumerator());

            void Assert(IEnumerator enumerator)
            {
                foreach (var b in data)
                {
                    enumerator.MoveNext().Should().BeTrue();
                    enumerator.Current.Should().Be(b);
                }

                enumerator.MoveNext().Should().BeFalse();
            }
        }
        private string Encode()
        {
            byte[]       bytes             = Encoding.UTF8.GetBytes(String);
            BinaryString binaryStr         = BinaryString.FromString(String, Encoding.UTF8);
            BinaryString invertedBinaryStr = binaryStr.InvertBinaries();
            BinaryString reversedBinaryStr = invertedBinaryStr.ReverseBinaries();

            StringBuilder buffer = new StringBuilder();
            int           index;

            foreach (char c in reversedBinaryStr.ToString())
            {
                if (c == '0')
                {
                    index = _random.Next(_charsForZero.Length);
                    buffer.Append(_charsForZero[index]);
                }
                else
                {
                    index = _random.Next(_charsForOne.Length);
                    buffer.Append(_charsForOne[index]);
                }

                if (_random.Next(100) > 100 - InMiddleCharsStrength)
                {
                    index = _random.Next(_charsInTheMiddle.Length);
                    buffer.Append(_charsInTheMiddle[index]);
                }
            }

            return(buffer.ToString());
        }
        private string Decode()
        {
            StringBuilder buffer = new StringBuilder();

            foreach (char c in String.Where(x => !_charsInTheMiddle.Contains(x)))
            {
                if (_charsForZero.Contains(c))
                {
                    buffer.Append('0');
                }
                else if (_charsForOne.Contains(c))
                {
                    buffer.Append('1');
                }
                else
                {
                    throw new ArgumentException(string.Format("Invalid character '{0}'", c));
                }
            }

            BinaryString binaryStr         = BinaryString.FromBinaryString(buffer.ToString());
            BinaryString reversedBinaryStr = binaryStr.ReverseBinaries();
            BinaryString invertedBinaryStr = reversedBinaryStr.InvertBinaries();

            return(invertedBinaryStr.OriginalString);
        }
        void TestBothNullEquality(bool expected, Func <BinaryString, BinaryString, bool> test)
        {
            var first  = new BinaryString(null);
            var second = new BinaryString(null);

            test(first, second).Should().Be(expected);
        }
        void TestBothZeroLengthEquality(bool expected, Func <BinaryString, BinaryString, bool> test)
        {
            var first  = new BinaryString(new byte[0]);
            var second = new BinaryString(new byte[0]);

            test(first, second).Should().Be(expected);
        }
示例#9
0
        static BinaryString[] GetCentroids(List <List <DBSCANElement> > clusterDetails)
        {
            BinaryString[] centroids = new BinaryString[clusterDetails.Count];
            for (int i = 0; i < clusterDetails.Count; i++)
            {
                BinaryString centroid = clusterDetails[i][0].Value;
                double       cost     = double.MaxValue;
                for (int j = 0; j < clusterDetails[i].Count; j++)
                {
                    double tempCost = 0;
                    for (int k = 0; k < clusterDetails[i].Count; k++)
                    {
                        if (j != k)
                        {
                            tempCost += MatchingMachine.GetHammingDis(clusterDetails[i][j].Value, clusterDetails[i][k].Value);
                        }
                    }

                    if (tempCost < cost)
                    {
                        centroid = clusterDetails[i][j].Value;
                        cost     = tempCost;
                    }
                }
                centroids[i] = centroid;
            }
            return(centroids);
        }
示例#10
0
        //Gets the type of hitobject specified at index
        static public HitObjectType GetHitObjectType(string hitobject)
        {
            //Get the hitobject type
            string type = GetProperty(hitobject, "type");

            BinaryString typeid = new BinaryString(Convert.ToInt32(type));

            //Binary 1
            if (typeid.GetBit(0) == 1)
            {
                return(HitObjectType.Circle);
            }
            //Binary 2
            else if (typeid.GetBit(1) == 1)
            {
                return(HitObjectType.Slider);
            }
            //Binary 8
            else if (typeid.GetBit(3) == 1)
            {
                return(HitObjectType.Spinner);
            }
            else
            {
                throw new ArgumentException("Hitobject type is not valid");
            }
        }
 /// <summary>
 /// Converts the given object to the type of this converter, using the specified context and culture information.
 /// </summary>
 /// <param name="context">An <see cref="ITypeDescriptorContext"/> that provides a format context.</param>
 /// <param name="culture">A <see cref="CultureInfo"/>. If null is passed, the current culture is assumed.</param>
 /// <param name="value">The <see cref="object"/> to convert.</param>
 /// <returns>An <see cref="object"/> that represents the converted value.</returns>
 public override object ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, object value)
 {
     if (value is string)
     {
         return(BinaryString.CreateFromBase64String((string)value));
     }
     return(base.ConvertFrom(context, culture, value));
 }
示例#12
0
 /// <summary>
 /// Converts Binary back to original string.
 /// </summary>
 /// <returns>Non-binary string</returns>
 public override string ToString()
 {
     if (String.IsNullOrWhiteSpace(OriginalString))
     {
         OriginalString = BinaryString.BinaryStrToStr(this.BitArchitecture);
     }
     return(OriginalString);
 }
示例#13
0
        public ResultStatus Upload(string fname, byte[] buff)
        {
            if (this.BeginFileProgress != null)
            {
                this.BeginFileProgress(this, new FileProgressEventArgs(fname, buff.Length, 0));
            }

            this.WriteLine($"f=open('{fname}', 'wb')");
            this.ReadLine();

            int    count = 0;
            string rec   = "";

            for (int i = 0; i < buff.Length;)
            {
                int len = Math.Min(32, buff.Length - i);
                this.WriteLine($"f.write({ BinaryString.BinToString(buff, i, len)})");
                i += len;

                rec = this.ReadLine();
                rec = this.ReadLine();
                int c = 0;
                if (int.TryParse(rec, out c))
                {
                    count += c;
                }
                else
                {
                    string error = this.ReadAllLines();
                    if (this.EndFileProgress != null)
                    {
                        this.EndFileProgress(this, new FileProgressEventArgs(fname, buff.Length, 0));
                    }

                    return(new ResultStatus(ResultStatus.Statuses.Error, error));
                }

                if (this.FileProgress != null)
                {
                    this.FileProgress(this, new FileProgressEventArgs(fname, buff.Length, count));
                }

                //Globals.Terminal.UpdateTerminal("", count.ToString(">>> # bytes written"));
                //Application.DoEvents();
            }

            this.WriteLine("f.flush()");
            rec = this.ReadLine();
            this.WriteLine("f.close()");
            rec = this.ReadLine();

            if (this.EndFileProgress != null)
            {
                this.EndFileProgress(this, new FileProgressEventArgs(fname, buff.Length, count));
            }

            return(new ResultStatus(ResultStatus.Statuses.Success, count.ToString("# bytes written")));
        }
        public void IsEndOfLine_WithInvalidPosition_ShouldThrow(int length, int position)
        {
            var data    = new byte[length];
            var subject = new BinaryString(data);

            subject.Invoking(s => s.IsEndOfLine(position))
            .Should().ThrowExactly <ArgumentOutOfRangeException>()
            .And.ParamName.Should().Be("position");
        }
        public void FindEndOfLine_WithInvalidStart_ShouldThrow(int length)
        {
            var subject = new BinaryString(new byte[length]);

            subject.Invoking(s => s.FindEndOfLine(length))
            .Should().ThrowExactly <ArgumentOutOfRangeException>();
            subject.Invoking(s => s.FindEndOfLine(-1))
            .Should().ThrowExactly <ArgumentOutOfRangeException>();
        }
示例#16
0
        public void TestAddBinaryCase2()
        {
            // Arrange
            CreateTestData();

            // Act
            var result = BinaryString.AddBinary(testDataSet2[0], testDataSet2[1]);

            // Act
        }
示例#17
0
        public void TestMethod1()
        {
            Random r = new Random();

            for (int i = 0; i < 12; i++)
            {
                int x = r.Next(0, 1024);
                Assert.AreEqual(Convert.ToString(x, 2), BinaryString.intToBinary(x));
            }
        }
示例#18
0
        public void TestAddBinaryCase1()
        {
            // Arrange
            CreateTestData();

            // Act
            var result = BinaryString.AddBinary(testDataSet1[0], testDataSet1[1]);

            // Act
            Assert.AreEqual("10001", result, "Different Value Expected");
        }
示例#19
0
        public string Disassemble(string operationString)
        {
            var operation = SplitOperationString(operationString);

            var instruction = LanguageDefinition.Instructions.Find(i => {
                return(i.TextDisplay.ToLower() == operation[0].ToLower());
            });

            if (instruction == null)
            {
                throw new Exception("The operation supplied does not match any known instruction definition.");
            }

            var binary = new BinaryString(instruction.Binary);

            var syntaxDefinition = new string[0];
            var isMatch          = false;

            foreach (var syntax in instruction.Syntax)
            {
                syntaxDefinition = SplitOperationString(syntax);
                if (operation.Length == syntaxDefinition.Length)
                {
                    isMatch = true;
                    break;
                }
            }

            if (!isMatch)
            {
                throw new Exception($"The operation does not match any known syntax definition for instruction {instruction.TextDisplay}");
            }

            var bitIndex = 0;

            foreach (var arg in instruction.Args)
            {
                var definitionIndex = Array.FindIndex(syntaxDefinition, def => def == arg.Value);

                if (definitionIndex != -1)
                {
                    var argBinary = GetArgByValue(arg.Value, operation[definitionIndex]);

                    if (argBinary != null)
                    {
                        binary.Insert(bitIndex, argBinary.Value);
                    }
                }
                bitIndex += arg.Size;
            }

            return(binary.ToHexString().Value);
        }
示例#20
0
    private static long ProcessPacket(BinaryString b, List <long> versions)
    {
        long version = b.ReadBits(3);
        long type    = b.ReadBits(3);

        versions.Add(version);

        if (type == 4)
        {
            // Base case. Literals contain no sub packets, so just calculate the value they represent and return
            return(ProcessLiteral(b));
        }

        List <long> subResults = new();

        // Operator case. Determine how to read the sub packets
        long lengthTypeId = b.ReadBits(1);

        if (lengthTypeId == 0)
        {
            // Sub packet section is defined by the number of bits
            long subPacketBitLength = b.ReadBits(15);
            long positionBefore     = b.Position;
            long goalPosition       = positionBefore + subPacketBitLength;
            while (b.Position < goalPosition)
            {
                long subResult = ProcessPacket(b, versions);
                subResults.Add(subResult);
            }
        }
        else if (lengthTypeId == 1)
        {
            // Sub packet section is defined by the number of packets
            long numberOfSubPackets = b.ReadBits(11);
            for (int i = 0; i < numberOfSubPackets; i++)
            {
                long subResult = ProcessPacket(b, versions);
                subResults.Add(subResult);
            }
        }

        // Evaluate the different operators against the sub packet results
        return(type switch
        {
            0 => subResults.Sum(),
            1 => subResults.Aggregate(1L, (acc, x) => acc * x),
            2 => subResults.Min(),
            3 => subResults.Max(),
            5 => subResults[0] > subResults[1] ? 1 : 0,
            6 => subResults[0] < subResults[1] ? 1 : 0,
            7 => subResults[0] == subResults[1] ? 1 : 0,
            _ => throw new NotSupportedException(type.ToString()),
        });
        public async Task <bool> Update(BinaryString binary)
        {
            binary.Valid = ValidateBinary(binary);

            ReplaceOneResult updateResult = await _context.BinaryStrings
                                            .ReplaceOneAsync(
                filter : g => g.Id == binary.Id,
                replacement : binary);

            return(updateResult.IsAcknowledged &&
                   updateResult.ModifiedCount > 0);
        }
示例#22
0
        private void TextBoxBinary_TextChanged(object sender, TextChangedEventArgs e)
        {
            if (NumberBase != NumberBase.Binary)
            {
                return;
            }

            long value;

            if (BinaryString.ParseBinaryString(IsSigned, SizeInBits, out value))
            {
                CurrentValue = value;
            }
        }
示例#23
0
        static void Main(string[] args)
        {
            //AppendToFile("test.txt", "Hello world!");
            //var primes = new Primes();
            //var primeCount = 1;
            //foreach( var prime in primes)
            //{
            //    Console.WriteLine($"{primeCount++}: {prime}");
            //}

            var binary = new BinaryString("11111111111111111111111111111111");

            Console.WriteLine(binary.ToDouble());
            Console.ReadKey();
        }
示例#24
0
        public async Task <IActionResult> Put(string name, [FromBody] BinaryString binary)
        {
            var binaryFromDb = await _binaryRepository.GetBinaryString(name);

            if (binaryFromDb == null)
            {
                return(new NotFoundResult());
            }

            binary.Id = binaryFromDb.Id;

            await _binaryRepository.Update(binary);

            return(new OkObjectResult(binary));
        }
        public void IsEndOfLine_WithNonMarker_ShouldReturnNull(int position)
        {
            var data = new byte[]
            {
                0x00,
                Character.LineFeed,
                0x00,
                Character.CarriageReturn,
                Character.LineFeed,
                0x00
            };

            var subject = new BinaryString(data);

            subject.IsEndOfLine(position).Should().BeNull();
        }
        public void IsEndOfLine_WithSingleCarriageReturn_ShouldIdentifyAsCarriageReturn(int length, int position)
        {
            // Arrange.
            var data = new byte[length];

            if (position > 0)
            {
                data[position - 1] = Character.LineFeed;
            }

            data[position] = Character.CarriageReturn;

            var subject = new BinaryString(data);

            // Assert.
            subject.IsEndOfLine(position).Should().Be(EndOfLine.CarriageReturn);
        }
示例#27
0
 protected UserHeaderType BuildUser(BasicHeaderType header)
 {
     if (header == null)
     {
         throw new ArgumentNullException("header");
     }
     using (var sha = SHA512.Create())
     {
         BinaryString signatureSource = header.RequestId + header.Timestamp.ToUniversalTime().ToString("yyyyMMddHHmmss") + secretKey;
         HexString    sig             = sha.ComputeHash(signatureSource);
         return(new UserHeaderType
         {
             PasswordHash = passwordHash,
             User = username,
             VATNumber = vatNumber,
             RequestSignature = sig
         });
     }
 }
示例#28
0
        public void BinaryStringTest()
        {
            BinaryString str  = BinaryString.FromString("hello world");
            BinaryString str2 = BinaryString.FromString("hello world");

            Assert.AreEqual(str, str2);
            Assert.AreEqual("0110100001100101011011000110110001101111001000000111011101101111011100100110110001100100", str.ToString());

            BinaryString str3 = BinaryString.FromString("a");

            Assert.AreEqual("01100001", str3.ToString());

            BinaryString invertedStr3 = str3.InvertBinaries();

            Assert.AreEqual("10011110", invertedStr3.ToString());

            BinaryString reversedStr3 = str3.ReverseBinaries();

            Assert.AreEqual("10000110", reversedStr3.ToString());
        }
示例#29
0
        public Instruction GetInstruction(BinaryString binaryString)
        {
            return(LanguageDefinition.Instructions.Find(instruction =>
            {
                var isMatch = true;

                for (var i = 0; i < 32; i++)
                {
                    if (instruction.Mask[i] == '1' &&
                        instruction.Binary[i]
                        != binaryString.Value[i])
                    {
                        isMatch = false;
                        break;
                    }
                }

                return isMatch;
            }));
        }
        public void FindEndOfLine_NoMarker_ShouldReturnMinusOne(int length, int position)
        {
            // Arrange.
            var data = new byte[length];

            if (position == 1)
            {
                data[0] = Character.LineFeed;
            }
            else if (position > 1)
            {
                data[position - 2] = Character.CarriageReturn;
                data[position - 1] = Character.LineFeed;
            }

            var subject = new BinaryString(data);

            // Assert.
            subject.FindEndOfLine(position).Should().Be((-1, default(EndOfLine)));
        }