Я бы согласился с тем, что вы читаете нулевой байт, и предложил бы использовать% d в качестве символа формата, хотя я лично предпочитаю hex и буду использовать
printf("byte : 0x%02X \n", ret);
Но у меня есть к вам вопрос. В такой маленькой программе, зачем спрашивать нас? Я не саркастичен, я искренне удивляюсь, почему вы не отлаживаете это самостоятельно. Просто создайте его в Eclipse и переходите по одной строке за раз, и Eclipse покажет вам значения всех локальных переменных, и вы увидите, что не так. Опять же - без обид.
Кстати, вы можете найти фактический формат файла JPEG здесь .