#include <stdio.h>
#include <math.h>
typedef long long;
typedef short integer;
long *tempdata;
long numbase[5]; /* 基数 */
long numunit[4]; /* 每单位对应的16进制数 */
long numunitprice[4]; /* 每单位对于的10进制数,已被从元为单位扩大1000倍 */
#pragma pack(push,1)
typedef struct tagfstrecord{ /* 每一条记录的长度为26字节 */
integer fsttime;
long price;
long avgprice;
integer changor;
integer unuse0;
long unuse1;
long unuse2;
long unuse3;
}fstrecord;
typedef fstrecord largerecord[240];
#pragma pack(pop)
/* 240个分记录,26个字节一个记录,6508字节一天 */
void loadfstdata( char filename[], largerecord **retfst )
{
file *ifile = null;
integer i, j, loadfstdata;
fstrecord tfr;
long filep;
long longdayfst = 6508;
long lenminutefst = 26;
long *tempdata, *tempmidprice, *fstmaxprice;
fstrecord (*fst)[240];
ifile = fopen(filename, "rb");
fseek(ifile, 0, seek_end);
loadfstdata = ftell(ifile) / 6508;
fst=(largerecord *)malloc(loadfstdata*sizeof(largerecord));
tempdata = (long *)malloc(loadfstdata*sizeof(long));
tempmidprice = (long *)malloc(loadfstdata*sizeof(long));
fstmaxprice = (long *)malloc(loadfstdata*sizeof(long));
for( j = 0; j<loadfstdata; ++ j )
{
fseek(ifile, j * longdayfst, seek_set);
fread(&tempdata[j], sizeof(tempdata[j]), 1, ifile);
fseek(ifile, 4+j * longdayfst, seek_set);
fread(&tempmidprice[j], sizeof(tempmidprice[j]), 1, ifile);
fstmaxprice[j] = 0;
for( i = 0; i<=239; ++i )
{
filep = j * longdayfst + i * lenminutefst + 8;
fseek(ifile, filep, seek_set);
fread( &tfr, sizeof(tfr), 1, ifile);
fst[j][i].fsttime = tfr.fsttime + 1;
fst[j][i].price = tfr.price;
fst[j][i].avgprice= tfr.avgprice;
fst[j][i].changor = tfr.changor;
if( abs(tfr.price - tempmidprice[j]) > fstmaxprice[j] )
fstmaxprice[j] = abs(tfr.price - tempmidprice[j]);
}
}
/* free(tempdata); */
free(tempmidprice);
free(fstmaxprice);
fclose(ifile);
*retfst = fst;
}
/* 注意移植此函数是要把公共变量numbase预numunit移动移植 */
long getrealprice(long formerprice)
{
integer i;
long result=0;
for( i = 1; i<=4; ++ i ) /* 该函数可返回32元人民币以下对于的准确价格 */
{
if( formerprice < numbase[i] )
{
result = ((formerprice - numbase[i-1]) * 1000) / numunit[i-1] + numunitprice[i-1];
break;
}
}
return result;
}
void main()
{
numbase[0] = 1065353216; numbase[1] = 1082130432; numbase[2] = 1090519040;
numbase[3] = 1098907648; numbase[4] = 1109655552; /*numbase[5] = 1118830592;*/
numunit[0] = 4194304; numunit[1] = 2097152; numunit[2] = 1048576;
numunit[3] = 524288; /* numunit[4] = 262144 */
numunitprice[0] = 0; numunitprice[1] = 4000; numunitprice[2] = 8000;
numunitprice[3] = 16000; /* numunitprice[4] = 32000; */
readzst_show(); /* 由这个窗体去调用以上的函数,自己写 */
}