请教:
63 8A 8A 7D-->10进制--->/86400 +"1970-01-01" 是如何得到2008-12-26 hh:mm:ss的?
我怎么算都是2036-9-29 hh:mm:ss,并且在FlesHEX里看也是2036 sep 29 hh=mm:ss.
晕!头大!
63 8A 8A 7D-->10进制--->/86400 +"1970-01-01" 是如何得到2008-12-26 hh:mm:ss的?
我怎么算都是2036-9-29 hh:mm:ss,并且在FlesHEX里看也是2036 sep 29 hh=mm:ss.
晕!头大!
63 8A 8A 7D 80 34 00 00 BC 34 00 00 44 34 00 00 BC 34 00 00 EE 74 05 00 8E 67 00 00
00 00 00 00 00 00 00 00 00 00 00 00
68 8A 8A 7D B2 34 00 00 BC 34 00 00 58 34 00 00 58 34 00 00 5E F8 03 00 63 4B 00 00 00 00 00 00 00 00 00 00 00 00 00 00
6D 8A 8A 7D 3A 34 00 00 58 34 00 00 12 34 00 00 58 34 00 00 25 6F 01 00 41 1B 00 00 00 00 00 00 00 00 00 00 00 00 00 00
------------------------------------
除每条记录第1字段外,其他字段用binary都可以直接读出了. 第一字段读出后是一个长整形数(x), 转换后应的时间不等于其真正的时间,或许这个字段是需要某种运算的.
请大家帮我分析一下.谢谢
-----------------------
#include <conio.h>
#include <stdio.h>
int main()
{
FILE * fp = fopen( "d:\\dzh\\DATA\\SHase\\Min\\600000.nmn", "rb" );
if( ! fp ) return 0;
char pcBuf[ 40 ] = "" ;
for( unsigned i=0; i<48; i++ )
{
fread( pcBuf, sizeof( pcBuf ), 1, fp );
unsigned uTime = *( unsigned * ) pcBuf;
unsigned uYear = ( uTime>>20 );//右移20位
unsigned uMonth = ( ( uTime<<12)>>28);//先左移12位再右移28位
unsigned uDate = ( ( uTime<<16)>>27);
unsigned uHour = ( ( uTime<<21)>>27);
unsigned uMinute = ( ( uTime<<26)>>26);
double dOpen = double( *( float *)(pcBuf + 4) ) / 1000.0;
double dHigh = double( *(float * )(pcBuf + 8) )/ 1000.0;
double dLow = double(*(float*)(pcBuf+12))/1000.0;
double dClose = double(*(float*)(pcBuf+16) )/1000.0;
double dAmount = double(*(float*)(pcBuf+20));
double dVolume = double(*(float*)(pcBuf+24)); printf( "%u-%02u-%02u %02u:%02u %9.2f,%9.2f,%9.2f%9.2f%11.2f%11.2f\n",
uYear, uMonth, uDate, uHour, uMinute, dOpen, dHigh, dLow, dClose, dAmount, dVolume );
}
fclose( fp );
return 0;
}
----------------
但我不懂vc 所以请高手帮忙转成vb
我用以下代码已经算出了"年"
但在计算"月"时"溢出"了 不知道该怎么办了Const s As Long = 2106231395y = s \ 2 ^ 20'正确
m = (s * 2 ^ 12) \ 2 ^ 28'溢出
d = s * 2 ^ 16 \ 2 ^ 27
h = (s * 2 ^ 21) \ 2 ^ 27
m = (s1 * 2 ^ 26) \ 2 ^ 26
Dim iYear As Integer, iMonth As Integer, iDay As Integer
Dim iHour As Integer, iMinute As Integer
iYear = DWord \ &H100000
iMonth = (DWord \ &H10000) And &HF&
iDay = (DWord \ &H800) And &H1F&
iHour = (DWord \ &H40) And &H1F&
iMinute = DWord And &H3F&
DWord2Date = DateSerial(iYear, iMonth, iDay) _
+ TimeSerial(iHour, iMinute, 0)
End Function
结果是 2008-10-17 09:35,C 代码与你举的例子不符。
太谢谢您了!
我和那段vc代码处理的是同一个问题
我想他可能是写错
您的代码解决了我的大问题
麻烦您给我讲讲运算过程
比如:iYear = DWord \ &H100000 是右移例几位?
iDay = (DWord \ &H800) And &H1F&又是什么意思?
按照 C 的规则,其实是将最高 16 位清除,最终右移 27-16=11 位,所以有效位为 32-16-11=5。
2^11 = &H800,5 个最低位的掩码就是 &H1F&,用 And 操作就可以其它的位过滤掉。