File Stream C#

using System;
using System.Collections.Generic;
using System.Text;
namespace ZWaveApi.Net.Utilities
{
    static class ByteFunctions
    {
        private const byte _sizeMask = 0x07;
        private const byte _scaleMask = 0x18;
        private const byte _scaleShift = 0x03;
        private const byte _precisionMask = 0xe0;
        private const byte _precisionShift = 0x05;
        static public int ExtractValue(byte[] _data, ref byte _scale)
        {
            byte size = (byte)(_data[0] & _sizeMask);
            byte precision = (byte)((_data[0] & _precisionMask) >> _precisionShift);
            if (_scale != null)
            {
                _scale = (byte)((_data[0] & _scaleMask) >> _scaleShift);
            }
            UInt32 value = 0;
            int result = 0;
            byte i;
            for (i = 0; i < size; ++i)
            {
                value <<= 8;
                value |= (UInt32)_data[i + 1];
            }
            // Deal with sign extension.  All values are signed
            if ((_data[1] & 0x80) == 0x80)
            {
                // MSB is signed
                if (size == 1)
                {
                    value |= 0xffffff00;
                }
                else if (size == 2)
                {
                    value |= 0xffff0000;
                }
                result = (int)(-1 * value);
            }
            else
            {
                result = (int)(value);
            }
            if (precision == 0)
            {
                return result;
            }
            else
            {
                return result / (int)Math.Pow(10, precision);
            }
        }
        static public int ByteToInt(byte[] _value)
        {
            if (BitConverter.IsLittleEndian)
            {
                Array.Reverse(_value);
            }
            if (_value.Length == 1)
            {
                return (Byte)(_value[0]);
            }
            else if (_value.Length == 2)
            {
                return BitConverter.ToInt16(_value, 0);
            }
            else
            {
                return BitConverter.ToInt32(_value, 0);
            }
        }
        static public byte[] IntToBytes(int _value)
        {
            byte[] result;
            int size = 4;
            if (_value < 0)
            {
                if ((_value & 0xffffff80) == 0xffffff80)
                {
                    size = 1;
                }
                else if ((_value & 0xffff8000) == 0xffff8000)
                {
                    size = 2;
                }
            }
            else
            {
                if ((_value & 0xffffff00) == 0)
                {
                    size = 1;
                }
                else if ((_value & 0xffff0000) == 0)
                {
                    size = 2;
                }
            }
            result = new byte[size];
            if (size > 2)
            {
                result[size - 4] = (byte)(_value >> 24);
                result[size - 3] = (byte)(_value >> 16);
            }
            if (size > 1)
            {
                result[size - 2] = (byte)(_value >> 8);
            }
            result[size - 1] = (byte)(_value);
            return result;
        }
    }
}