副标题及;延迟时间(另一个C溢出怀疑)

副标题及;延迟时间(另一个C溢出怀疑),c,C,我试图计算要添加到字幕文件中的时间偏移量,以纠正延迟。下面显示的部分是在将hh:mm:ss,uuu(uuu代表微秒)标记到time[]数组中之后出现的。我把时间转换成微秒,然后加上实际时间和滞后时间,得到最后的时间 程序正确地计算实际和滞后时间。但是,它给出了错误的最后一小时时间。我是否遇到了下面的代码无法处理的溢出情况 编辑:我意识到了错误。对于小时时间,我应该除法而不是取余数 int i; int time[4]; unsigned long totalTime,totalLagTime;

我试图计算要添加到字幕文件中的时间偏移量,以纠正延迟。下面显示的部分是在将
hh:mm:ss,uuu
(uuu代表微秒)标记到
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]);
难道不是吗

time[0] = totalTime / 3600000;

您有一个逻辑错误:36694330
mod
3600000实际上是694330


你到底想做什么?

time[0]=totalTime%3600000您在这里尝试做什么?你想把它从毫秒转换成小时吗?10小时,10分钟,10秒和10毫秒的延迟时间,对于不到一分半钟的电影来说?这是一个子文件的一小部分,@Thomas,我想检查一下这个程序是否适用于极端情况。现在我看到了代码,我意识到它应该是
totalTime/3600000
,谢谢穆根!
time[0] = totalTime / 3600000;