Difference between revisions of "Deserialize Raw Data"
Jump to navigation
Jump to search
Line 18: | Line 18: | ||
buf[3] = data[i+3]; | buf[3] = data[i+3]; | ||
if (buf[0] == 0 && buf[1] == 0 && buf[2] == 0 && buf[3] == 0) continue; | if (buf[0] == 0 && buf[1] == 0 && buf[2] == 0 && buf[3] == 0) continue; | ||
ret[i / 4] = BitConverter.ToSingle(buf); | ret[i / 4] = BitConverter.ToSingle(buf); | ||
} | } | ||
return ret; | return ret; | ||
} | } |
Revision as of 16:25, 8 October 2022
Theory
The raw data field is a stream of 60 little endian IEEE 754 floats, so it has exactly 240 bytes. The first 4 bytes represent the first minute of the hour and so on. Note that 0x000000 is defined to be NULL (no value).
C# example
public static float?[] GetRawValues(byte[] data) { var elements = data.Length / 4; byte[] buf = new byte[4]; float?[] ret = new float?[elements]; for(int i = 0; i < data.Length; i += 4) { buf[0] = data[i]; buf[1] = data[i+1]; buf[2] = data[i+2]; buf[3] = data[i+3]; if (buf[0] == 0 && buf[1] == 0 && buf[2] == 0 && buf[3] == 0) continue; ret[i / 4] = BitConverter.ToSingle(buf); } return ret; }