8바이트를 Double형으로 변환 후 시간가져오기에 대해(C++)

sanckldp의 이미지


안녕하세요.

현재, flv의 onmetaData에서 Duration(총 재생시간)을 뽑아오려고 합니다.

일단, flv 규격서에는 Duration의 값이 Double형으로 초단위로 들어가 있다고 하네요.

그래서 Flv 파일에서 Duration에 해당하는 8Byte를 그대로 읽었습니다.

1. double duration = (double)0x40703a24dd2f1a0a;

여기서, 값이 너무 크네요....

또한, Double형을 SYSTEMTIME으로 변환해주는 함수를 이용해봤는데

값이 엉뚱하게 들어가구요...

참고로, 플레이어에서 재생되는 시간은 4:19 초로 되어있습니다.

1.번에서의 값을 아무리 어떻게 쥐어짜봐도 4:19란 시간이 나오질 않네요///

도움을 주세요.ㅠ.ㅠ.

qiiiiiiiip의 이미지

#include <stdio.h>
 
union pack
{
    double d;
    long long int l;
};
 
int main()
{
    union pack t;
    t.l = 0x40703a24dd2f1a0a;
    fprintf( stdout, "%f %llx\n", t.d, t.l );
 
    return 0;
}
 
$ gcc main.c
$ ./a.out
259.634000 40703a24dd2f1a0a

259.634초라고 하네요.

qiiiiiiiip의 이미지

그냥

double d;
fread( &d, sizeof( double ), 1, fp );

라고하면 정상적으로 읽힐것 입니다.. (endian문제가 없다면)