@ -15,10 +15,11 @@ public static class BitUtls
/// <param name="scale">精度</param>
/// <param name="scale">精度</param>
/// <param name="round">保留几位小数</param>
/// <param name="round">保留几位小数</param>
/// <param name="offset">位偏移</param>
/// <param name="offset">位偏移</param>
/// <param name="unSign">对float和double 默认无符号</param>
/// <returns></returns>
/// <returns></returns>
/// <exception cref="ArgumentException"></exception>
/// <exception cref="ArgumentException"></exception>
public static object Bytes2Value ( byte [ ] bytes , Type propertyType , int start , int length ,
public static object Bytes2Value ( byte [ ] bytes , Type propertyType , int start , int length ,
double scale , int round , double offset )
double scale , int round , double offset , bool unSign = true )
{
{
if ( propertyType = = BOOLEAN ) return Convert . ChangeType ( Byte2Bit ( bytes , start , length ) = = 1 , propertyType ) ;
if ( propertyType = = BOOLEAN ) return Convert . ChangeType ( Byte2Bit ( bytes , start , length ) = = 1 , propertyType ) ;
@ -44,17 +45,16 @@ public static class BitUtls
if ( propertyType = = FLOAT )
if ( propertyType = = FLOAT )
return
return
Convert . ChangeType ( Math . Round ( Byte2Float ( bytes , start , length , scale ) - offset , round ) , propertyType ) ;
Convert . ChangeType ( Math . Round ( Byte2Float ( bytes , start , length , scale , unSign ) - offset , round ) , propertyType ) ;
if ( propertyType = = DOUBLE )
if ( propertyType = = DOUBLE )
return
return
Convert . ChangeType ( Math . Round ( Byte2Double ( bytes , start , length , scale ) - offset , round ) ,
Convert . ChangeType ( Math . Round ( Byte2Double ( bytes , start , length , scale , unSign ) - offset , round ) ,
propertyType ) ;
propertyType ) ;
if ( propertyType = = STRING )
if ( propertyType = = STRING )
{
{
return Convert . ChangeType ( Encoding . ASCII . GetString ( bytes , start , length / 8 ) , propertyType ) ;
return Convert . ChangeType ( Encoding . ASCII . GetString ( bytes , start , length ) , propertyType ) ;
}
}
if ( propertyType = = BYTEARRAY )
if ( propertyType = = BYTEARRAY )
@ -221,23 +221,23 @@ public static class BitUtls
return list . ToArray ( ) ;
return list . ToArray ( ) ;
}
}
public static float Byte2Float ( byte [ ] bytes , int startBit , int length , double factor )
public static float Byte2Float ( byte [ ] bytes , int startBit , int length , double factor , bool unSign )
{
{
if ( length < 17 )
if ( length < 17 )
{
{
int d = Byte2Int16 ( bytes , startBit , length ) ;
int d = unSign ? Byte2UInt16 ( bytes , startBit , length ) : Byte2Int16 ( bytes , startBit , length ) ;
return ( float ) ( d * factor ) ;
return ( float ) ( d * factor ) ;
}
}
else
else
{
{
var d = Byte2 Int32( bytes , startBit , length ) ;
Int64 d = unSign ? Byte2U Int32( bytes , startBit , length ) : Byte2Int32 ( bytes , startBit , length ) ;
return ( float ) ( d * factor ) ;
return ( float ) ( d * factor ) ;
}
}
}
}
public static double Byte2Double ( byte [ ] bytes , int startBit , int length , double factor )
public static double Byte2Double ( byte [ ] bytes , int startBit , int length , double factor , bool unSign )
{
{
var d = Byte2U Int32( bytes , startBit , length ) ;
Int64 d = unSign ? Byte2UInt32 ( bytes , startBit , length ) : Byte2 Int32( bytes , startBit , length ) ;
return ( float ) ( d * factor ) ;
return ( float ) ( d * factor ) ;
}
}