Я пытаюсь вычислить временной сдвиг, который будет добавлен к файлам субтитров, чтобы исправить задержку. Часть, показанная ниже, - после токенизации hh:mm:ss,uuu
(uuu означает микросекунды) в массив time[]
. Я конвертирую время в микросекунды, а затем добавляю фактическое & время задержки, чтобы получить окончательное время.
Программа правильно рассчитывает фактическое время задержки. Тем не менее, это дает неправильное время последнего часа. Я столкнулся с каким-то условием переполнения, которое не может быть обработано приведенным ниже кодом?
Редактировать: Я понял ошибку. Я должен делить, а не брать остаток за hour time
.
int i;
int time[4];
unsigned long totalTime,totalLagTime;
...
for(i=0;i<4;i++)
{
printf("time[%d] = %d\n",i,time[i]);
}
for(i=0;i<4;i++)
{
printf("lag time[%d] = %d\n",i,lagTime[i]);
}
totalTime = 1000*(3600*time[0] + 60*time[1] + time[2]) + time[3];
printf("total time is %u in milliseconds\n",totalTime);
totalLagTime = 1000*(3600*lagTime[0] + 60*lagTime[1] + lagTime[2]) + lagTime[3];
printf("total lag time is %u in milliseconds\n",totalLagTime);
totalTime += totalLagTime;
printf("Now, total time is %u in milliseconds\n",totalTime);
time[0] = totalTime % 3600000;
printf("hour time is %d\n",time[0]);
Контрольный пример:
00:01:24,320
time[0] = 0
time[1] = 1
time[2] = 24
time[3] = 320
lag time[0] = 10
lag time[1] = 10
lag time[2] = 10
lag time[3] = 10
total time is 84320 in milliseconds
total lag time is 36610010 in milliseconds
Now, total time is 36694330 in milliseconds
hour time is 694330