首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

这是一段VB6的代码,哪位高手能给翻译成C语言的

2012-03-13 
这是一段VB6的代码,谁能给翻译成C语言的这是一段VB6的代码,谁能给翻译成C语言的Publictempdata()AsLongPub

这是一段VB6的代码,谁能给翻译成C语言的
这是一段VB6的代码,谁能给翻译成C语言的 
Public tempdata() As Long 
Public NumBase(5) As Long '基数 
Public NumUnit(4) As Long '每单位对应的16进制数 
Public NumUnitPrice(4) As Long '每单位对于的10进制数,已被从元为单位扩大1000倍 
Public Type tempFSTrecord '每一条记录的长度为26字节: 
  FSTtime As Integer 
  price As Long 
  avgPrice As Long 
  changor As Integer 
  unUse0 As Integer 
  unUse1 As Long 
  unUse2 As Long 
  unUse3 As Long 
End Type 
Function LoadFSTdata(ByVal filename As String, fst() As FSTrecord) '240个分记录,26个字节一个记录,6508字节一天 
  Dim ifile As Integer, i As Integer, j As Integer 
  Dim TFR As tempFSTrecord 
  Dim fileP As Long 
  Dim lenDayFST As Long: longDayFST = 6508 
  Dim lenminuteFST As Long: lenminuteFST = 26 
  ifile = FreeFile 
  Open filename For Binary As ifile 
  'LoadFSTdata = (LOF(ifile) - 8) / 26 - 10 
  LoadFSTdata = LOF(ifile) / 6508 

  ReDim fst(1 To LoadFSTdata, 239) 
  ReDim tempdata(1 To LoadFSTdata) 
  ReDim tempMidprice(1 To LoadFSTdata) 
  ReDim fstMaxPrice(1 To LoadFSTdata) 
  For j = 1 To LoadFSTdata 
  Get ifile, 1 + (j - 1) * longDayFST, tempdata(j) 
  Get ifile, 5 + (j - 1) * longDayFST, tempMidprice(j) 
  fstMaxPrice(j) = 0 
  For i = 0 To 239 
  fileP = (j - 1) * longDayFST + i * lenminuteFST + 8 + 1 
  Get ifile, fileP, TFR 
  fst(j, i).FSTtime = TFR.FSTtime + 1 'fst(i).FSTtime = TimeSerial(0, TFR.FSTtime + 1, 0) 
  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) Then 
  fstMaxPrice(j) = Abs(TFR.price - tempMidprice(j)) 
  End If 
  Next i 
  Next j 
  Close ifile 
End FunctionFunction getRealPrice(formerPrice As Long) As Long '注意移植此函数是要把公共变量NumBase预NumUnit移动移植 
  Dim i As Integer 
  For i = 1 To 4 '该函数可返回32元人民币以下对于的准确价格 
  If formerPrice < NumBase(i) Then 
  getRealPrice = (Val((formerPrice - NumBase(i - 1)) & "000") / NumUnit(i - 1)) + NumUnitPrice(i - 1) 
  Exit For ' & 000 相当于 * 1000,以‰为单位 
  End If 
  Next i 
End Function 
Public Sub 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'由这个窗体去调用以上的函数,自己写 
End Sub

[解决办法]
fst() As FSTrecord
这个是什么东西
===========================
fst是一个FSTrecord类型的数组


ifile = FreeFile 
===========================
获取一个空闲的文件句柄


ReDim fst(1 To LoadFSTdata, 239) 
===========================
重新定义数组fst的大小,第一维是1 .. LoadFSTdata,第二维是239


Get ifile, 1 + (j - 1) * longDayFST, tempdata(j) 
===========================
从文件ifile中读取大小为1+(j-1)*longDayFST的数据块,存入数组tempdata(j)里面
[解决办法]
不知道这样对了没有,那几个Redim挺迷糊的~ 是全局变量重定义?

C/C++ code
 
#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(); /* 由这个窗体去调用以上的函数,自己写 */
}

热点排行