Esempio n. 1
0
        public static int HammingDistance(BitArray hash1, BitArray hash2)
        {
            if (hash1.Length != hash2.Length)
            {
                throw new ArgumentException("Can't compare hashes with different length");
            }

            var d    = 0;
            var bits = hash1.Xor(hash2);

            for (var i = 0; i < bits.Length; i++)
            {
                d += bits[i] ? 1 : 0;
            }

            return(d);
        }
Esempio n. 2
0
        public static byte[] ToHashBytes(this BitArray bits)
        {
            var length = (bits.Length - 1) / 8 + 1;

            byte[] result = new byte[length];
            for (var i = 0; i < result.Length; i++)
            {
                var index = i * 8;
                result[i] = (byte)(
                    (bits[index + 0] ? 0b10000000 : 0b0) |
                    (bits[index + 1] ? 0b1000000 : 0b0) |
                    (bits[index + 2] ? 0b100000 : 0b0) |
                    (bits[index + 3] ? 0b10000 : 0b0) |
                    (bits[index + 4] ? 0b1000 : 0b0) |
                    (bits[index + 5] ? 0b100 : 0b0) |
                    (bits[index + 6] ? 0b10 : 0b0) |
                    (bits[index + 7] ? 0b1 : 0b0));
            }
            return(result);
        }
Esempio n. 3
0
        public static string ToHashString(this BitArray bits)
        {
            var length = (bits.Length - 1) / 8 + 1;
            var result = new System.Text.StringBuilder(length * 2);

            for (var i = 0; i < length; i++)
            {
                var index = i * 8;
                result.AppendFormat("{0:x2}", (byte)(
                                        (bits[index + 0] ? 0b10000000 : 0b0) |
                                        (bits[index + 1] ? 0b1000000 : 0b0) |
                                        (bits[index + 2] ? 0b100000 : 0b0) |
                                        (bits[index + 3] ? 0b10000 : 0b0) |
                                        (bits[index + 4] ? 0b1000 : 0b0) |
                                        (bits[index + 5] ? 0b100 : 0b0) |
                                        (bits[index + 6] ? 0b10 : 0b0) |
                                        (bits[index + 7] ? 0b1 : 0b0)));
            }
            return(result.ToString());
        }