Пример #1
0
        protected override BitStream InternalValueToBitStream()
        {
            ulong bits;

            dynamic value = GetNumber(InternalValue);

            if (value > 0 && (ulong)value > MaxValue)
            {
                string msg   = string.Format("Error, {0} value '{1}' is greater than the maximum {2}-bit {3} number.", debugName, value, lengthAsBits, Signed ? "signed" : "unsigned");
                var    inner = new OverflowException(msg);
                throw new SoftException(inner);
            }

            if (value < 0 && (long)value < MinValue)
            {
                string msg   = string.Format("Error, {0} value '{1}' is less than the minimum {2}-bit {3} number.", debugName, value, lengthAsBits, Signed ? "signed" : "unsigned");
                var    inner = new OverflowException(msg);
                throw new SoftException(inner);
            }

            if (LittleEndian)
            {
                bits = LittleBitWriter.GetBits(value, (int)lengthAsBits);
            }
            else
            {
                bits = BigBitWriter.GetBits(value, (int)lengthAsBits);
            }

            var bs = new BitStream();

            bs.WriteBits(bits, (int)lengthAsBits);
            return(bs);
        }
Пример #2
0
        private dynamic FromBitstream(BitStream bs)
        {
            ulong bits = bs.ReadBits((int)lengthAsBits);

            if (Signed)
            {
                if (LittleEndian)
                {
                    return(LittleBitWriter.GetInt64(bits, (int)lengthAsBits));
                }
                else
                {
                    return(BigBitWriter.GetInt64(bits, (int)lengthAsBits));
                }
            }
            else
            {
                if (LittleEndian)
                {
                    return(LittleBitWriter.GetUInt64(bits, (int)lengthAsBits));
                }
                else
                {
                    return(BigBitWriter.GetUInt64(bits, (int)lengthAsBits));
                }
            }
        }
Пример #3
0
        public void BitConverter()
        {
            /*
             * Unsigned, BE, 12bit "A B C" -> 0x0ABC ->  2748
             * Signed  , BE, 12bit "A B C" -> 0xFABC -> -1348
             * Unsigned, LE, 12bit "B C A" -> 0x0ABC ->  2748
             * Signed  , LE, 12bit "B C A" -> 0xFABC -> -1348
             */

            byte[] val = null;

            val = BitWriter <BigEndian> .GetBytes(0xABC, 0);

            Assert.AreEqual(new byte[] { }, val);
            Assert.AreEqual(0, BigBitWriter.GetUInt64(val, 0));
            Assert.AreEqual(0, BigBitWriter.GetInt64(val, 0));

            val = BitWriter <BigEndian> .GetBytes(0xABC, 12);

            Assert.AreEqual(new byte[] { 0xab, 0xc0 }, val);
            Assert.AreEqual(2748, BigBitWriter.GetUInt64(val, 12));
            Assert.AreEqual(-1348, BigBitWriter.GetInt64(val, 12));

            val = BitWriter <LittleEndian> .GetBytes(0xABC, 0);

            Assert.AreEqual(new byte[] { }, val);
            Assert.AreEqual(0, LittleBitWriter.GetUInt64(val, 0));
            Assert.AreEqual(0, LittleBitWriter.GetInt64(val, 0));

            val = BitWriter <LittleEndian> .GetBytes(0xABC, 12);

            Assert.AreEqual(new byte[] { 0xbc, 0xa0 }, val);
            Assert.AreEqual(2748, LittleBitWriter.GetUInt64(val, 12));
            Assert.AreEqual(-1348, LittleBitWriter.GetInt64(val, 12));

            ulong bits = 0;

            bits = BitWriter <BigEndian> .GetBits(0xABC, 12);

            Assert.AreEqual(0xABC, bits);
            Assert.AreEqual(2748, BigBitWriter.GetUInt64(bits, 12));
            Assert.AreEqual(-1348, BigBitWriter.GetInt64(bits, 12));

            bits = BitWriter <LittleEndian> .GetBits(0xABC, 12);

            Assert.AreEqual(0xBCA, bits);
            Assert.AreEqual(2748, LittleBitWriter.GetUInt64(bits, 12));
            Assert.AreEqual(-1348, LittleBitWriter.GetInt64(bits, 12));
        }