예제 #1
0
        float ReadStreamFloat(this Stream stream, int offset, bool little)
        {
#if SAFE_CAST
            byte[] intBytes = new byte[4];
            stream.Position = offset;
            stream.Read(intBytes, 0, intBytes.Length);
            if (BitConverter.IsLittleEndian != little)
            {
                Reverse(intBytes, 0, intBytes.Length);
            }

            fixed(byte *bs = intBytes)
            {
                float *c = (float *)bs;

                return(*c);
            }
#else
            if (BitConverter.IsLittleEndian == little)
            {
                FloatField fs = new FloatField(stream, offset);
                return(fs.FloatVal);
            }
            else
            {
                RFloatField fs = new RFloatField(stream, offset);
                return(fs.FloatVal);
            }
#endif
        }
예제 #2
0
        void WriteStreamFloat(this Stream stream, int offset, float value, bool little)
        {
#if SAFE_CAST
            byte[] intBytes = new byte[4];

            fixed(byte *bs = intBytes)
            {
                float *c = (float *)bs;

                *c = value;
                if (BitConverter.IsLittleEndian != little)
                {
                    Reverse4(c);
                }
            }

            stream.Position = offset;
            stream.Write(intBytes, 0, intBytes.Length);
#else
            if (BitConverter.IsLittleEndian == little)
            {
                FloatField fs = new FloatField(value);
                fs.Fill(stream, offset);
            }
            else
            {
                RFloatField fs = new RFloatField(value);
                fs.Fill(stream, offset);
            }
#endif
        }
예제 #3
0
        void WriteFloat(this byte[] arr, int offset, float value, bool little)
        {
#if SAFE_CAST
            fixed(byte *bs = arr)
            {
                float *target = (float *)(bs + offset);

                (*target) = value;
            }

            if (BitConverter.IsLittleEndian != little)
            {
                Reverse(arr, offset, 4);
            }
#else
            if (BitConverter.IsLittleEndian == little)
            {
                FloatField fs = new FloatField(value);
                fs.Fill(arr, offset);
            }
            else
            {
                RFloatField fs = new RFloatField(value);
                fs.Fill(arr, offset);
            }
#endif
        }
예제 #4
0
        float ReadFloat(this byte[] arr, int offset, bool little)
        {
#if PROFILER
            Profiler.BeginSample("ReadFloat");
#endif
#if SAFE_CAST
            float f;
            fixed(byte *bytes = arr)
            {
                byte *databytes = bytes + offset;

                f = *((float *)databytes);
            }

            if (BitConverter.IsLittleEndian != little)
            {
                Reverse4(&f);
            }

#if PROFILER
            Profiler.EndSample();
#endif
            return(f);
#else
            if (BitConverter.IsLittleEndian == little)
            {
                FloatField fs = new FloatField(arr, offset);
                return(fs.FloatVal);
            }
            else
            {
                RFloatField fs = new RFloatField(arr, offset);
                return(fs.FloatVal);
            }
#endif
        }