Ваша логика преобразования предполагает, что количество прочитанных байтов будет точно равно ожидаемому.К сожалению, это не так.Таким образом, в вашем цикле вам нужно изменить его на просмотр фактических прочитанных байтов:
for (i=0;i<BytesRead;i++)
и
for (i=0;i<(BytesRead*2);i++)
Но кроме этого, потому что ввод / вывод буферизуется, и вы не можетевсе равно получите все байты, которые вы хотите.Поэтому лучшее, что нужно сделать, это поместить сам фред в цикл, чтобы вы могли определить, когда наступил фактический конец, а не предполагать, что вы можете прочитать все это за один раз:
int TotalRead = 0;
int BytesRead;
while(TotalRead < Bytes && (BytesRead = fread(TmpLoc, 1, Bytes - TotalRead,PrcFile)) > 0) {
/* do your converting and needed stuff here */
TotalRead += BytesRead;
}
Таким образом, выпродолжайте читать до конца файла.Или, конечно, вы всегда можете проверить на чтение не более байтов.