|
|
|
@ -15,10 +15,11 @@ public static class BitUtls
|
|
|
|
|
/// <param name="scale">精度</param>
|
|
|
|
|
/// <param name="round">保留几位小数</param>
|
|
|
|
|
/// <param name="offset">位偏移</param>
|
|
|
|
|
/// <param name="unSign">对float和double 默认无符号</param>
|
|
|
|
|
/// <returns></returns>
|
|
|
|
|
/// <exception cref="ArgumentException"></exception>
|
|
|
|
|
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);
|
|
|
|
|
|
|
|
|
@ -44,11 +45,11 @@ public static class BitUtls
|
|
|
|
|
|
|
|
|
|
if (propertyType == FLOAT)
|
|
|
|
|
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)
|
|
|
|
|
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);
|
|
|
|
|
|
|
|
|
|
if (propertyType == STRING)
|
|
|
|
@ -220,23 +221,23 @@ public static class BitUtls
|
|
|
|
|
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)
|
|
|
|
|
{
|
|
|
|
|
int d = Byte2Int16(bytes, startBit, length);
|
|
|
|
|
int d =unSign ? Byte2UInt16(bytes, startBit, length) : Byte2Int16(bytes, startBit, length);
|
|
|
|
|
return (float)(d * factor);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
var d = Byte2Int32(bytes, startBit, length);
|
|
|
|
|
Int64 d = unSign ? Byte2UInt32(bytes, startBit, length) : Byte2Int32(bytes, startBit, length) ;
|
|
|
|
|
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 = Byte2UInt32(bytes, startBit, length);
|
|
|
|
|
Int64 d = unSign ? Byte2UInt32(bytes, startBit, length) : Byte2Int32(bytes, startBit, length);
|
|
|
|
|
return (float)(d * factor);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|