CGPathElement выглядит так:
struct CGPathElement {
CGPathElementType type;
CGPoint * points;
};
где тип элемента - целое число, и в зависимости от типа число может быть от 2 до 6.
Так что это может быть сериализовано в следующее
int;float;float;int;float;float;float;float;float;float;
поэтому я смотрю на первый байт, определяю тип, получаю следующие n * 4 байта в зависимости от типа и добавляю его в мой путь.
Мне действительно нужно только перейти от двоичного формата к путям, но если бы мне нужно было преобразовать обратно, CGPathApply из Rhythmic Fistman определенно был бы инструментом для использования.