C++ 代码改java代码--急急!!

来源:互联网 发布:青年网络公开课视频 编辑:程序博客网 时间:2024/06/07 07:02

typedef struct 

{

    BYTE    baOrigMDN[8];      /* 主叫用户MDN */

    BYTE    baDestMDN[8];      /* 被叫用户MDN */

    BYTE    bOrigIsVIP;         /* SP无用*/

    BYTE    bMsgIsSeed;        /* 短消息是否种子 */

    BYTE    baSeedID[6];        /* 种子短信ID */

    BYTE    baQijiSeedID[6];     /* 种子短信ID标示 */

}csrMTSMsgStrc_T;

如何将baQijiSeedID[6]的内容转成时间字符串(YYYYMMDDHHMMSS)的算法:

BYTE baTimeTmp[6] ={0};

CHAR caSubmitTime[20] = {0};  //内容为YYYYMMDDHHMMSS的时间

memcpy(baTimeTmp, baQijiSeedID, 6); //baQijiSeedID内存区域的6个字节复制到baTimeTmp

if (0x80 == (baQijiSeedID [4] & 0xC0))

{

baTimeTmp[0] = 0;

}

if (0x20 == (baQijiSeedID [4] & 0x30))

{

baTimeTmp[1] = 0;

}

if (0x08 == (baQijiSeedID [4] & 0x0C))

{

baTimeTmp[2] = 0;

}

if (0x02 == (baQijiSeedID [4] & 0x03))

{

baTimeTmp[3] = 0;

}

csfClockDecodeProc(baTimeTmp, (BYTE *) caSubmitTime);

 

// 时间结构
typedef struct
{
        BYTE                second;
        BYTE                minute;
        BYTE                hour;
        BYTE                day;
        BYTE                month;
        WORD                year;
        BYTE                week;
        BYTE                Count10ms;
} ClockStruc;

/*
 * FUNCTION NAME: void TIME_TO_CLOCK(TimePtr, ClockPtr)
 * DESCRIPTION:   relative clock to real clock
 * INPUT:         TimePtr: store time pointer
 *                ClockPtr: store clock pointer 
 */
void TIME_TO_CLOCK(DWORD *TimePtr, ClockStruc *ClockPtr)
{
        WORD   DaysPerYear = 365;
    WORD   year;
    DWORD  days, dayss;
    DWORD  seconds;
    BYTE   month, day, week, hour, minute, second;

        days    = *TimePtr / 86400; //
一天86400s转换为
days
        seconds = *TimePtr % 86400;
        hour    = (BYTE)(seconds / 3600);
        seconds = seconds % 3600;
        minute  = (BYTE)(seconds / 60);
        second  = (BYTE)(seconds % 60);
        dayss   = days;

        /* compute year */
        year = 1994;
        while (days >= DaysPerYear)   // DaysPerYear = 365
    {
                days -= DaysPerYear;
                if ((++ year % 4) == 0)
                        DaysPerYear = 366;
                else
                        DaysPerYear = 365;
        }

        /* compute month */
        if ((year % 4) == 0)
                DaysPerMonth[1] = 29;
        else
                DaysPerMonth[1] = 28;

        month = 1;
        while (days >= DaysPerMonth[month - 1])
        {
                days -= DaysPerMonth[month - 1];
                month ++;
        }

        /* compute date and week */
        day  =(BYTE)(days + 1);
        week = (BYTE)((dayss + 6) % 7);
        if (week == 0)
                week = 7;

        ClockPtr->year   = year;
        ClockPtr->month  = month;
        ClockPtr->day    = day;
        ClockPtr->hour   = hour;
        ClockPtr->minute = minute;
        ClockPtr->second = second;
        ClockPtr->week   = week;
}

      

/*---------------------------------------------------------------------

-   :   csfClockDecodeProc

-   功能描述:   DWORD(4个字节)时间值转换为YYYYMMDDHHMMSS字符串

-       :   BYTE *pTime ---->DWORD(秒数)的版权短信发送时间

-              

-       :   const BYTE *pClock ----> YYYYMMDDHHMMSS字符串

-----------------------------------------------------------------------*/

void csfClockDecodeProc(const BYTE *pbTime, BYTE *pbClock)

{

    ClockStruc tClockPtr = {0};

    DWORD dwTime = 0 ;

       BYTE  i;

       memcpy(&dwTime, pbTime, 4);

       TIME_TO_CLOCK(&dwTime, &tClockPtr);

       memset(pbClock, 0, 20);

        for (i = 0; i < 4; i++)                             /* */

       {

            pbClock[3 - i] = tClockPtr.year % 10 + 0x30;

           tClockPtr.year = tClockPtr.year / 10;

       }

        pbClock[4] = tClockPtr.month / 10 + 0x30;           /* */

pbClock[5] = tClockPtr.month % 10 + 0x30;

pbClock[6] = tClockPtr.day / 10 + 0x30;             /* */

    pbClock[7] = tClockPtr.day % 10 + 0x30;

    pbClock[8] = tClockPtr.hour / 10 + 0x30;            /* */

    pbClock[9] = tClockPtr.hour % 10 + 0x30;

    pbClock[10] = tClockPtr.minute / 10 + 0x30;         /* */

    pbClock[11] = tClockPtr.minute % 10 + 0x30;

    pbClock[12] = tClockPtr.second / 10 + 0x30;         /* */

    pbClock[13] = tClockPtr.second % 10 + 0x30;

}     

 

 

步骤如下:1:将BCD码的高低4位互换

          2:将互换后的BCD码转为字符串

A)对于种子短信ID的转码算法

/*---------------------------------------------------------------------

-       :      csBcdToStr

-       功能描述:      BCD码转换成字符串

-           :      pbBcd    ----> BCD码流

-                            bInLen   ----> BCD码流的字节数

-               bBufLen  ----> 接收字符串用缓冲区长度

-           :      pcStrBuf ----> 接收字符串用缓冲区

-             :      TRUE/FALSE

-----------------------------------------------------------------------*/

BOOL csBcdToStr( BYTE*  pbBcd,

                       BYTE   bInLen,

                       PCHAR  pcStrBuf,

                       BYTE   bBufLen)

{

BYTE    bTmp;

BYTE    cTmp;

BYTE    i;

BYTE    bMaxBcdLen;

 

if( !pbBcd || !pcStrBuf || !bBufLen ) /* 入参检查 */

{

        return  FALSE;

}

 

bMaxBcdLen = min(bInLen*2, bBufLen-1);

 

for( i=0; i<bMaxBcdLen; i++ )

{

        bTmp = pbBcd[i/2];

 

        if( i&1 ) /* 奇数 */

        {

               bTmp = bTmp >> 4;

        }

 

        bTmp &= 0x0f;

 

        if((bTmp >= 0) && (bTmp <=9))

            cTmp = bTmp +'0';

        else if(bTmp == 0x0d)

            cTmp = '*';

        else if(bTmp == 0x0e)

            cTmp = '#';

        else if (bTmp == (BYTE)0x0f)

            break;

        else

            return FALSE;

 

        pcStrBuf[i] = cTmp;

 

}

 

pcStrBuf[i] = 0; /* 字符串结束 */

 

return  TRUE;

 

}

 

B)对于用户MDN的转码算法

VOID csrBCDToString(const BYTE *lpBcd,CHAR *lpString,BYTE size)

{

    BYTE    i,j=0;

    BYTE    ch;

   

    for(i=0;i<size;i++)

    {

        ch = (lpBcd[i]&0xF0)>>4;

        if(ch<=9 /*&& ch>=0*/)

        {

            lpString[j] = (CHAR)(ch+0x30);  //from '0'

            j++;

        }

        else if(ch>=10 && ch<=15)

        {

            lpString[j] = (CHAR)(ch+0x41-10);  //from 'A'

            j++;

        }

        else // if(ch==0x0f)

        {

            if( j< size*2 )

            {

                while ( j<size*2 ) lpString[j++] = 'f';

                lpString[j] = 0x00;

                return ;

            }

            lpString[j++]=0x00;

            break;

        }

       

        ch = lpBcd[i]&0x0F;

        if(ch<=9 /*&& ch>=0*/)

            lpString[j++]= (CHAR)(ch+0x30);

        else if(ch>=10 && ch<=15)

            lpString[j++] = (CHAR)(ch+0x41-10);  //from A

        else //if(ch==0x0f)

        {

            if( j< size*2 )

            {

                while(j<size*2) lpString[j++] = 'f';

                lpString[j] = 0x00;

                return ;

            }

            lpString[j++]=0x00;

            break;

        }

    }   // for

    lpString[j++]=0x00;

    return ;

}

原创粉丝点击