Mega Code Archive

 
Categories / C# / File Stream
 

Int to byte array converter

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;         }     } }