.Net doesn't have a built-in 32-bit fixed point data type, but you could store the result pretty easily in a double.
This is not quite as efficient or elegant as what you're probably looking for, but you could do something like this to convert your byte array to a double:
byte[] m = new byte[4] { 172, 68, 0, 0 };
double[] magnitude = new[] { 256.0, 1.0, 1.0/256.0, 1.0/65536.0 };
double i = m.Zip(magnitude, (x, y) => x * y).Sum(); // 44100.0
Alternatively, if you change the way you store the bits like this:
byte[] m = new byte[4] { 0, 0, 68, 172 };
double i = BitConverter.ToUInt32(m, 0) / 65536.0; // 44100.0
The conversion between your original storage format and this one is fairly straightforward. You could probably simply reverse the bytes, although I'm not entirely sure which decimal digit is more significant.