Субтитры и время задержки (еще одно сомнение переполнения C) - PullRequest
0 голосов
/ 18 января 2011

Я пытаюсь вычислить временной сдвиг, который будет добавлен к файлам субтитров, чтобы исправить задержку. Часть, показанная ниже, - после токенизации 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

Ответы [ 2 ]

2 голосов
/ 18 января 2011

Разве это не должно быть

time[0] = totalTime / 3600000;
0 голосов
/ 18 января 2011

У вас логическая ошибка: 36694330 mod 3600000 - это действительно 694330.

Что именно вы пытаетесь сделать?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...