One mistake is
intValue = ReadPointer<double>(Pointer);
You're reading a double instead of an int, which will throw everything else off.
Of course your code has plenty of other issues too. For example, you're completely ignoring alignment and struct padding issues.