ToInt64() публичный статический Метод

public static ToInt64 ( byte value, int startIndex ) : long
value byte
startIndex int
Результат long
Пример #1
0
        public BTreePage(byte[] pageData)
        {
            _byteIterator = 0;



            Records = new List <NodeRecord> {
                Capacity = (int)Static.MemMax
            };
            Childrens = new List <long> {
                Capacity = (int)Static.ChilMax
            };

            ParentIndex     = BC.ToInt64(pageData, _byteIterator);
            _byteIterator  += sizeof(long);
            SelfIndex       = BC.ToInt64(pageData, _byteIterator);
            _byteIterator  += sizeof(long);
            _presentRecords = BC.ToInt64(pageData, _byteIterator);
            _byteIterator  += sizeof(long);
            IsLeaf          = BC.ToBoolean(pageData, _byteIterator);
            _byteIterator  += sizeof(bool);

            for (var i = 0; i < _presentRecords; i++)
            {
                var key = BC.ToInt64(pageData, _byteIterator);
                _byteIterator += sizeof(long);
                var pageIndex = BC.ToInt64(pageData, _byteIterator);
                _byteIterator += sizeof(long);

                Records.Add(new NodeRecord(key, pageIndex));
            }
            if (!IsLeaf)
            {
                for (var i = 0; i < _presentRecords + 1; i++)
                {
                    Childrens.Add(BC.ToInt64(pageData, _byteIterator));
                    _byteIterator += sizeof(long);
                }
            }
        }
Пример #2
0
 public BTreeHeaderPage(byte[] headerPage)
 {
     RootIndex      = BC.ToInt64(headerPage, _byteIterator);
     _byteIterator += sizeof(long);
 }
Пример #3
0
 /// <summary>
 /// 返回指定的字节数组中以指定位置的字节转换来的值
 /// </summary>
 /// <param name="buffer">来源字节数组</param>
 /// <param name="offset">数据偏移</param>
 /// <returns>值</returns>
 public static long ToInt64(this byte[] buffer, int offset)
 {
     return(BitConverter.ToInt64(buffer, offset));
 }
Пример #4
0
 public static long ToInt64(ReadOnlySpan <byte> value) => Converter.ToInt64(value);
Пример #5
0
        /// <summary>转为长整数。支持字符串、全角、字节数组(小端)、时间(Unix毫秒)</summary>
        /// <param name="value">待转换对象</param>
        /// <param name="defaultValue">默认值。待转换对象无效时使用</param>
        /// <returns></returns>
        public virtual Int64 ToLong(Object value, Int64 defaultValue)
        {
            if (value == null || value == DBNull.Value)
            {
                return(defaultValue);
            }

            // 特殊处理字符串,也是最常见的
            if (value is String str)
            {
                // 拷贝而来的逗号分隔整数
                str = str.Replace(",", null);
                str = ToDBC(str).Trim();
                if (str.IsNullOrEmpty())
                {
                    return(defaultValue);
                }

                if (Int64.TryParse(str, out var n))
                {
                    return(n);
                }
                return(defaultValue);
            }

            // 特殊处理时间,转Unix毫秒
            if (value is DateTime dt)
            {
                if (dt == DateTime.MinValue)
                {
                    return(0);
                }

                //// 先转UTC时间再相减,以得到绝对时间差
                //return (Int32)(dt.ToUniversalTime() - _dt1970).TotalSeconds;
                return((Int64)(dt - _dt1970).TotalMilliseconds);
            }
            if (value is DateTimeOffset dto)
            {
                if (dto == DateTimeOffset.MinValue)
                {
                    return(0);
                }

                return((Int64)(dto - _dto1970).TotalMilliseconds);
            }

            if (value is Byte[] buf)
            {
                if (buf == null || buf.Length < 1)
                {
                    return(defaultValue);
                }

                switch (buf.Length)
                {
                case 1:
                    return(buf[0]);

                case 2:
                    return(BitConverter.ToInt16(buf, 0));

                case 3:
                    return(BitConverter.ToInt32(new Byte[] { buf[0], buf[1], buf[2], 0 }, 0));

                case 4:
                    return(BitConverter.ToInt32(buf, 0));

                case 8:
                    return(BitConverter.ToInt64(buf, 0));

                default:
                    break;
                }
            }

            //暂时不做处理  先处理异常转换
            try
            {
                return(Convert.ToInt64(value));
            }
            catch { return(defaultValue); }
        }