C # Implementation Stream Reader Cbytesreader

Source: Internet
Author: User
Tags prev
Cbytesreader class
Using System; namespace Common {///<summary>///author:Jave.Lin///date:2018-03-24///</summar 
            Y> public class Cbytesreader:idisposable {public static bool Islittleendian//return True {
        get {return Bitconverter.islittleendian;}
        } private int _m_ipos;
        Private byte[] _m_pbuffer;
        private int _m_iidx;

        private int _m_ilen;
        public int Irealpos {get {return _m_iidx + _m_ipos;}}
        public int Iidx {get {return _m_iidx;}} public int IPos {get {return _m_ipos;}
        set {_m_ipos = value;}}
        public int Ilen {get {return _m_ilen;}}

        public int Iremainfreesize {get {return _m_ilen-_m_ipos;}} Public Cbytesreader () {} public Cbytesreader (byte[] buffer, int idx = 0, int len = 0) {SETB
        Uffer (buffer, IDX, Len); public void Dispose () {_m_pbuffer = Null
            } public void SetBuffer (byte[] buffer, int idx = 0, int len = 0) {if (buffer = null)
                {_m_pbuffer = null;
                _m_iidx = 0;
            _m_ilen = 0;
                else {_m_pbuffer = buffer;
                _m_iidx = idx; _m_ilen = Len = 0?
                _m_pbuffer.length:len;
            _checklen (_m_ilen);
            } public void Addlen (int value) {var PreV = _m_ilen + value;
        _checklen (PreV);
        public void Setlen (int len) {_m_ilen = Len;
        }///<summary>///Attention, it'll change Original-buffer data!
            </summary> public void trimreaded () {var remain = iremainfreesize;
            var rpos = Irealpos;
       if (Remain > 0 && rpos!= _m_iidx) {         Buffer.blockcopy (_m_pbuffer, RpoS, _m_pbuffer, _m_iidx, remain);
        } _m_ipos = 0;  } public void TrimReaded1 (int canRead) {if (CanRead > 0) {var
                RealPos = Irealpos; var canreadpos = RealPos + canRead;
                Real POS + can read Len Buffer.blockcopy (_m_pbuffer, RealPos, _m_pbuffer, _m_iidx, CanRead);
            Array.clear (_m_pbuffer, CanRead + _m_iidx, canreadpos);
        } _m_ipos = 0;
            Public Char Readchar () {_checkremain (2);
            var ret = Bitconverter.tochar (_m_pbuffer, _m_iidx + _m_ipos);
            _m_ipos + 2;
        return ret;
            public bool Readbool () {_checkremain (1);
        return _M_PBUFFER[_M_IIDX + _m_ipos++]!= 0;
            Public sbyte Readsbyte () {_checkremain (1); Return (sbyte) _m_pbuffer[_m_iidx + _m_ipos++];
            Public byte ReadByte () {_checkremain (1);
        return _m_pbuffer[_m_iidx + _m_ipos++]; public void Readbytes (byte[] result, int resultlen, int resultidx = 0) {if (result = null ) {_throwerr (this. GetType ().
            FullName + "Readbytes Argument:result = null"); } if (result. LENGTH-RESULTIDX) < Resultlen) {_throwerr (this. GetType ().
            FullName + "Readbytes Argument:resultlen too Large");
            } _checkremain (Resultlen);
            Buffer.blockcopy (_m_pbuffer, _m_iidx + _m_ipos, result, Resultidx, Resultlen);
        _m_ipos + = Resultlen;
            public short ReadInt16 () {_checkremain (2);
            var ret = bitconverter.toint16 (_m_pbuffer, _m_iidx + _m_ipos);
            _m_ipos + 2;
        return ret; } public ushort ReaduInt16 () {_checkremain (2);
            var ret = bitconverter.touint16 (_m_pbuffer, _m_iidx + _m_ipos);
            _m_ipos + 2;
        return ret;
            public int ReadInt32 () {_checkremain (4);
            var ret = Bitconverter.toint32 (_m_pbuffer, _m_iidx + _m_ipos);
            _m_ipos + 4;
        return ret;
            Public UINT ReadUInt32 () {_checkremain (4);
            var ret = Bitconverter.touint32 (_m_pbuffer, _m_iidx + _m_ipos);
            _m_ipos + 4;
        return ret;
            Public long ReadInt64 () {_checkremain (8);
            var ret = Bitconverter.toint64 (_m_pbuffer, _m_iidx + _m_ipos);
            _m_ipos + 8;
        return ret;
            Public ulong ReadUInt64 () {_checkremain (8);
            var ret = Bitconverter.touint64 (_m_pbuffer, _m_iidx + _m_ipos);
            _m_ipos + 8; ReturnRet
            public float Readsingle () {_checkremain (4);
            var ret = Bitconverter.tosingle (_m_pbuffer, _m_iidx + _m_ipos);
            _m_ipos + 4;
        return ret;
            Public double readdouble () {_checkremain (8);
            var ret = bitconverter.todouble (_m_pbuffer, _m_iidx + _m_ipos);
            _m_ipos + 8;
        return ret;
                private void _checkremain (int value) {if (Iremainfreesize < value) { _throwerr (this. GetType ().
            FullName + "EOB (end of byte[])"); 
            } private void _checklen (int value) {if (Value > (_m_pbuffer.length-_m_iidx)) {_throwerr (this. GetType (). FullName + "Set Read buffer ' s Len larger than buffer.
            Length "); }} private void _throwerr (string errmsg) {throw new Exception (errmsg); }
    }
}
Application

The following Bitconverterext class, where you can see the implementation

            var one = false;
            var two = true;
            var three = true;
            var four = false;

            var arrbool = new Bool[3] {true, false, true};

            var bytes = new byte[200];
            var pos = 0;
            Bitconverterext.getbytes (bytes, one, 0);
            Bitconverterext.getbytes (bytes, two, pos + sizeof (BOOL));
            Bitconverterext.getbytes (bytes, three, pos + sizeof (BOOL));
            Bitconverterext.getbytes (bytes, four, pos + sizeof (BOOL));
            Bitconverterext.getbytes (Bytes, ' a ', pos + sizeof (BOOL));
            Bitconverterext.getbytes (Bytes, arrbool, pos + sizeof (char));
            Bitconverterext.getbytes (bytes, (ushort) 0xf0ff, pos = sizeof (BOOL) * 3);
            Bitconverterext.getbytes (bytes, new char[] {' A ', ' B '}, pos + sizeof (ushort));
            Bitconverterext.getbytes (bytes, new ushort[] {0xff, 0x8}, pos + = sizeof (char) * 2); Bitconverterext.getbytes (Bytes, 0xff, pos + sizeof (ushort) * 2);
            Bitconverterext.getbytes (Bytes, 0xffffffu, pos + sizeof (int));
            Bitconverterext.getbytes (Bytes, 0.999f, pos + sizeof (UINT));
            Bitconverterext.getbytes (Bytes, 0.999D, pos + sizeof (float));
            Bitconverterext.getbytes (bytes, new int[] {1, 2, 3, 4}, pos + + sizeof (double));
            Bitconverterext.getbytes (bytes, new uint[] {5, 6, 7, 8}, pos = sizeof (int) * 4);
            Bitconverterext.getbytes (bytes, new float[] {0.1f, 0.2f, 0.3f, 0.4f}, pos + + sizeof (UINT) * 4);
            Bitconverterext.getbytes (bytes, new double[] {0.1d, 0.2d, 0.3d, 0.4d}, pos = sizeof (FLOAT) * 4);
            Bitconverterext.getbytes (bytes, new long[] {0xff, 0xFFFF, 0xFFFFFF, 0xFFFFFFFF}, pos + + sizeof (double) * 4);

            Bitconverterext.getbytes (bytes, new ulong[] {0xffff, 0xffffff, 0xFFFFFFFF, 0xffffffffff}, pos = sizeof (LONG) * 4); var reader = new Cbytesreader (bytes);
Output
+ bytes {byte[200]} byte[] reader.iidx 0 int Reader.ilen int reader.ipos 183 int Reader.irealpos 183 int Reader.iremain int reader. ReadByte () 1 byte reader. ReadByte () 0 byte reader. ReadByte () 1 byte reader. ReadUInt16 () 61695 ushort 0xf0ff 61695 int reader. Readchar () ' A ' char reader. Readchar () ' B ' char reader. ReadUInt16 () 255 ushort Reader. ReadUInt16 () 8 ushort Reader. ReadUInt32 () 255 UINT reader. ReadUInt32 () 16777215 uint 0xffffffu 16777215 UINT reader. Readsingle () 0.999 float reader. Readdouble () 0.999 double reader. ReadInt32 () 1 int reader. ReadInt32 () 2 int reader. ReadInt32 () 3 int reader. ReadInt32 () 4 int reader. ReadUInt32 () 5 uint reader. ReadUInt32 () 6 uint reader. ReadUInt32 () 7 UINT reader. REadUInt32 () 8 uint reader. Readsingle () 0.1 float reader. Readsingle () 0.2 float reader. Readsingle () 0.3 float reader. Readsingle () 0.4 float reader. Readdouble () 0.1 double reader. Readdouble () 0.2 double reader. Readdouble () 0.3 double reader. Readdouble () 0.4 double reader. ReadInt64 () 255 long reader. ReadInt64 () 65535 long reader. ReadInt64 () 16777215 long reader. ReadInt64 () 4294967295 long reader. ReadUInt64 () 65535 ulong reader. ReadUInt64 () 16777215 ulong reader. ReadUInt64 () 4294967295 ulong reader.
 ReadUInt64 () 1099511627775 ULONG

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.