Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.11.2016, 21:36   #1
cya
Новичок
Джуниор
 
Аватар для cya
 
Регистрация: 21.11.2016
Сообщений: 2
По умолчанию Преобразовать интервал времени

Здравствуйте. Мне хотелось бы понять или услышать подсказку здесь, как мне решить задачу, в двух словах, что хотел сделать: есть звуковой редактор "GoldWave" и "3Ds Max", для удобства, решил сделать преобразователь временной шкалы, у них она разная.
"3Ds Max", хоть и позволяет несколько вариантов расчета времени, но такого как у "GoldWave" - нет, приходиться извращаться полчаса...

Формат GW 00:00:03.16320 (HH:MM:SS.T),
Формат Max 0:3:1600 (MM: SS: TICKS),
о Макс - время представляется в формате минуты:секунды:тики
и позволяет отсчитывать время с интервалом в 1/4800 долю секунды.

Что я делал, ничего не получается...
Требуется 00:00:00.00000 преобразовать в формат 0:0:0000

Код:
#include <windows.h>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <math.h>

#define TICK_3DMAX	4800
#define MILLISECOND	1000
#define MICROSECOND	1000000
#define NANOSECOND	100000000

#if __WORDSIZE == 64
typedef long int int64_t;
#else
typedef long long int int64_t;
#endif

int64_t ParseTime(char* str)
{
	int64_t t;
	int hh, mm, ss, fract;
	
	if( sscanf_s(str, "%d:%d:%d.%lu", &hh, &mm, &ss, &fract) != 4 )
	//if( sscanf_s(str, "%d:%d:%d.%d", &hh, &mm, &ss, &fract) != 4 ) {
		printf("Badly formed time %s\n", str);
		return -1;
	}

	// 1000 - Миллисекунды.
	//t = ( ( ( (hh * 60)  + mm * 60 ) + ss ) * MILLISECOND ) + fract;

	// 1000000 - Микросекунды.
	t = ( ( ( (hh * 60)  + mm * 60 ) + ss ) * MICROSECOND ) + fract;

	// 100000000 - Наносекунды.
	//t = ( ( ( (hh * 60)  + mm * 60 ) + ss ) * NANOSECOND ) + fract;

	return t;
}

int main(int argc, char **argv)
{
	int Ticks, Milliseconds, Seconds, Minutes, Hours;
	Ticks = Milliseconds = Seconds = Minutes = Hours = 0;

	// Data from "GoldWave" editor.
	char svStr[] = "00:00:00.10000";// Max = 0:0:4790 -> 0:1:0 // sliderTime = 30f

	int64_t Timestamp;
	Timestamp = ParseTime(svStr);

	// Convert TICKs.
	Milliseconds = static_cast<int>( (Timestamp / MILLISECOND) % MILLISECOND );
	Ticks = static_cast<int>( (Milliseconds * MICROSECOND) % TICK_3DMAX );

	// Convert Seconds.
	Seconds = static_cast<int>( (((Timestamp / MILLISECOND) - Milliseconds) / MILLISECOND) % 60 );

	// Convert Minutes.
	Minutes = static_cast<int>( (((((Timestamp / MILLISECOND) - Milliseconds) / MILLISECOND) - Seconds) / 60) % 60 );

	printf("Result: %d:%d:%d\n", Minutes, Seconds, Ticks);
	system("pause");
	return 0;
}
cya вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Таймер в массиве и интервал времени yohohox Общие вопросы Delphi 7 21.09.2016 17:42
Интервал времени Luchfan12 Помощь студентам 2 14.03.2014 02:39
Определить интервал времени JS stepennwolf JavaScript, Ajax 4 27.12.2010 22:15
Excel 2007 Как расчитать интервал времени за несколько суток Олег SH Помощь студентам 0 29.11.2009 10:47
Как возратить динамическое число в интервал времени Psm Microsoft Office Excel 3 11.06.2009 21:53