Question:
Could you tell me why this takes a 150MHz Pentium with 64MB of RAM just to run fast enough to catch MCI time output?
Private Sub Rply_Timer_Run()Dim ReplayTime As LongDim CTime As LongDim iTemp As LongDim iLong As LongDim j As IntegerReplayIndex = 0BaseData = 1000000000Do While Rply = True ReplayTime = SaveData(ReplayIndex).CDTime_Data iLong = frmCD2.MMControl1.Position iTemp = iLong And &HFF00 &H100 CDTime = iTemp / 10 CTime = CStr(iTemp) / 10 frmCD2.lblCDTime.Caption = Format(CTime / 100, "0.000") frmCD2.lblCDTime.Refresh If (ReplayTime >= CDTime And ReplayTime <= (CDTime + 10)) Then OutData = SaveData(ReplayIndex).In_Out_Data ReplayIndex = ReplayIndex + 1 OutputData = OutData - BaseData OutputDataA = (CLng(OutputData) 10000) OutputDataB = (CLng(OutputData 1000)) - (CLng(OutputDataA * 1000)) OutputDataC = (CLng(OutputData)) -OutputDataA * 1000000) + CLng(OutputDataB * 1000)) OutputDataA1 = CStr(OutputDataA) OutputDataB1 = CStr(OutputDataB) OutputDataC1 = CStr(OutputDataC) PCDioOutPortA1 (OutputDataA1) PCDioOutPortB1 (OutputDataB1) PCDioOutPortC1 (OutputDataC1) j = j + 1 Else j = j + 1 End If If j = 100 Then DoEvents j = 0 End If LoopEnd Sub
Any help would be very much appreciated. (Version: Version 4.0 Professional)
Answer:
The kernel of the solution is that sixteen is 2 to the fourth power. Each position in the hex string can be translated into four binary digits to create the final result. To do this, you need to create a lookup table of the following structure and data;
cHex cBin 0 0000 1 0001 2 0010 3 0011 4 0100 5 0101 6 0110 7 0111 8 1000 9 1001 A 1010 B 1011 C 1100 D 1101 E 1110 F 1111
Now, you can take the hex result that comes from the BINARY keyword and decode it using the lookup table, stacking your result with the least significant bit on the right (backwards).