예제 #1
0
파일: CDRReader.cs 프로젝트: atolab/cscdr
 public double ReadDouble()
 {
     Align(8);
     return(IsLittleEndian
         ? BinaryPrimitives.ReadDoubleLittleEndian(ReadBytes(8))
         : BinaryPrimitives.ReadDoubleBigEndian(ReadBytes(8)));
 }
예제 #2
0
        public double ReadDouble()
        {
            CborInitialByte     header = PeekInitialByte(expectedType: CborMajorType.Simple);
            ReadOnlySpan <byte> buffer = GetRemainingBytes();
            double result;

            switch (header.AdditionalInfo)
            {
            case CborAdditionalInfo.Additional16BitData:
                EnsureReadCapacity(buffer, 1 + SizeOfHalf);
                result = ReadHalfBigEndian(buffer.Slice(1));
                AdvanceBuffer(1 + SizeOfHalf);
                AdvanceDataItemCounters();
                return(result);

            case CborAdditionalInfo.Additional32BitData:
                EnsureReadCapacity(buffer, 1 + sizeof(float));
                result = BinaryPrimitives.ReadSingleBigEndian(buffer.Slice(1));
                AdvanceBuffer(1 + sizeof(float));
                AdvanceDataItemCounters();
                return(result);

            case CborAdditionalInfo.Additional64BitData:
                EnsureReadCapacity(buffer, 1 + sizeof(double));
                result = BinaryPrimitives.ReadDoubleBigEndian(buffer.Slice(1));
                AdvanceBuffer(1 + sizeof(double));
                AdvanceDataItemCounters();
                return(result);

            default:
                throw new InvalidOperationException(SR.Cbor_Reader_NotAFloatEncoding);
            }
        }
예제 #3
0
        public double ReadDouble()
        {
            CborInitialByte     header = PeekInitialByte(expectedType: CborMajorType.Special);
            ReadOnlySpan <byte> buffer = _buffer.Span;
            double result;

            switch (header.AdditionalInfo)
            {
            case CborAdditionalInfo.Additional16BitData:
                EnsureBuffer(buffer, 3);
                result = ReadHalfBigEndian(buffer.Slice(1));
                AdvanceBuffer(3);
                AdvanceDataItemCounters();
                return(result);

            case CborAdditionalInfo.Additional32BitData:
                EnsureBuffer(buffer, 5);
                result = BinaryPrimitives.ReadSingleBigEndian(buffer.Slice(1));
                AdvanceBuffer(5);
                AdvanceDataItemCounters();
                return(result);

            case CborAdditionalInfo.Additional64BitData:
                EnsureBuffer(buffer, 9);
                result = BinaryPrimitives.ReadDoubleBigEndian(buffer.Slice(1));
                AdvanceBuffer(9);
                AdvanceDataItemCounters();
                return(result);

            default:
                throw new InvalidOperationException("CBOR data item does not encode a floating point number.");
            }
        }
예제 #4
0
        public double ReadDouble()
        {
            Span <byte> buffer = stackalloc byte[8];

            this.Read(buffer);
            return(BinaryPrimitives.ReadDoubleBigEndian(buffer));
        }
    public async Task <double> ReadDoubleAsync()
    {
        using var buffer = new RentedArray <byte>(sizeof(double));
        await this.ReadAsync(buffer);

        return(BinaryPrimitives.ReadDoubleBigEndian(buffer));
    }
예제 #6
0
        public double ReadAsDouble()
        {
            var value = BinaryPrimitives.ReadDoubleBigEndian(_span);

            Advance(sizeof(double));
            return(value);
        }
예제 #7
0
        public async Task <double> ReadDoubleAsync()
        {
            var buffer = new byte[8];

            await this.ReadAsync(buffer);

            return(BinaryPrimitives.ReadDoubleBigEndian(buffer));
        }
예제 #8
0
 private static object ParseValue(DataContentType dataContentType, ReadOnlySpan <byte> currentValueBytes)
 {
     return(dataContentType switch
     {
         DataContentType.DOUBLE => BinaryPrimitives.ReadDoubleBigEndian(currentValueBytes),
         DataContentType.FLOAT => BinaryPrimitives.ReadSingleBigEndian(currentValueBytes),
         DataContentType.BYTE => currentValueBytes[0],
         DataContentType.SHORT => BinaryPrimitives.ReadInt16BigEndian(currentValueBytes),
         DataContentType.INTEGER => BinaryPrimitives.ReadInt32BigEndian(currentValueBytes),
         DataContentType.LONG => BinaryPrimitives.ReadInt64BigEndian(currentValueBytes) as object,
         _ => throw new InvalidDataException("Invalid data type"),
     });
        public double GetDouble(int index, ByteOrder byteOrder)
        {
            var source = byteArray.AsSpan(index, sizeof(double));

            if (byteOrder == ByteOrder.LittleEndian)
            {
                return(BinaryPrimitives.ReadDoubleLittleEndian(source));
            }

            if (byteOrder == ByteOrder.BigEndian)
            {
                return(BinaryPrimitives.ReadDoubleBigEndian(source));
            }

            return(double.NaN);
        }
예제 #10
0
 public static double GetBytesAsDoubleBigEndian(byte *b)
 {
     return(BinaryPrimitives.ReadDoubleBigEndian(new ReadOnlySpan <byte>(b, 8)));
 }
예제 #11
0
 public double ReadDoubleBigEndian()
 => BinaryPrimitives.ReadDoubleBigEndian(base.ReadBytes(8));
예제 #12
0
 public double ReadDouble() => IsBigEndian?BinaryPrimitives.ReadDoubleBigEndian(Slice(8)) : BinaryPrimitives.ReadDoubleLittleEndian(Slice(8));
예제 #13
0
 public override double ReadDouble() =>
 BinaryPrimitives.ReadDoubleBigEndian(InternalRead(8));
예제 #14
0
 public double ReadDoubleB() => BinaryPrimitives.ReadDoubleBigEndian(this.ReadBytes(sizeof(double)));
예제 #15
0
 public static double ReadDoubleBigEndian(ReadOnlySpan <byte> source)
 => BinaryPrimitives.ReadDoubleBigEndian(source);