我用::GetSystemTime()得到系统时间,然后将时,分,秒,年,月,日转换成BCD码,比如02年12月12日09时14时15分23秒,
在DEbug中16进制表示的BCD码就为02,12,12,09,14,15,23
但在release中就变成了20,21,21,90,41,15,32,每一个占一个字节,整好反过来了。
我的代码是这样的:
SYSTEMTIME dt;
::GetSystemTime(&dt);
if((dt.wHour+8) == 24)
dt.wHour = -8;
ic.Type=TIMECARD;
ic.TimeNul[0]=ByteBCD(dt.wSecond);
ic.TimeNul[1]=ByteBCD(dt.wMinute);
ic.TimeNul[2]=ByteBCD(dt.wHour+8);
ic.TimeNul[3]=ByteBCD(dt.wDay);
ic.TimeNul[4]=ByteBCD(dt.wMonth);
ic.TimeNul[5]=ByteBCD(dt.wYear%100);BYTE CFlashhotDlg::BCD(int &Num)
{
int i;
i=Num%10;
Num/=10;
return i;
}//适用数字范围0~99
BYTE CFlashhotDlg::ByteBCD(const int Num)
{
int i;
i=Num;
return   BCD(i) | BCD(i) << 4;
}我想不明白是怎么回事,是到时间的时候不同,还是在不同版本中的位操作不同?
很怪的一个问题,和大家共同探讨。

解决方案 »

  1.   

    BYTE CFlashhotDlg::BCD(int &Num)
    {
    int i;
    i=Num%10;
    Num/=10;
             ~~~~~~~~~ 这里会改变Num
    return i;
    }BYTE CFlashhotDlg::ByteBCD(const int Num)
    {
    int i;
    i=Num;
    return   BCD(i) | BCD(i) << 4;
                        ~~~~~~~~~~~~~~~~~~~~~应该是debug和release对|运 
                                             算符从左到右和从右到左的
                                             运算顺序不同引起的
                                              
    }