typedef struct  
{
    BYTE    baOrigMDN[8];      
    BYTE    baDestMDN[8];      
    BYTE    bOrigIsVIP;         
    BYTE    bMsgIsSeed;        
    BYTE    baSeedID[6];        
    BYTE    baQijiSeedID[6];     
}csrMTSMsgStrc_T;
如何将baQijiSeedID[6]的内容转成时间字符串(YYYYMMDDHHMMSS)的算法:
BYTE baTimeTmp[6] ={0};
CHAR caSubmitTime[20] = {0};  //内容为YYYYMMDDHHMMSS的时间
memcpy(baTimeTmp, baQijiSeedID, 6); 
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 
 */ 
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 ----> 接收字符串用缓冲区
-----------------------------------------------------------------------*/
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 ;
}

解决方案 »

  1.   

    说你要实现什么功能,给我们看这代码有什么用。
    不同语言的实现能一样么。c++写100行,也许java一个api就搞定。
      

  2.   

    把上面代码编译成dll,然后用java的JNI调用,这个行么?
      

  3.   


    现在转这个太有难度了,刚毕业那会,c和java都会时,还可以帮你搞定,现在c可望完了哟
      

  4.   

    有啥道理啊!? API不是代码写出来的啊?你怎么知道java里的API实现代码就不超过100行呢?
      

  5.   

    是要求输入毫秒还是秒,然后出日期字符串吧?java有现成的api: long lTimestamp = System.currentTimeMillis(); //系统当前毫秒数
    SimpleDateFormat sdf=new SimpleDateFormat("yyyyMMddHHmmss"); 
    System.out.println(sdf.format(lTimestamp));
      

  6.   

    BCD码分好几种,没规则只看代码可没的转,就算逐字逐句翻译过来也不一定好用。你有C++的代码,直接JNI多好,省的翻译啊。
      

  7.   

    怎么没道理,已经有现成的api了  直接用就行了
    就算api用了200行代码那又有什么  不就是为了方便么 哪有你这样抬杠的
    api相对来说就已经是某个功能用java实现的极限了  你再用java写也最多写道和api水平一样的 
      

  8.   


    API只有Java有啊?C++里面没有API啊?Java一个API能搞定,C++就必须得自己写100行代码啊?啥道理啊?看来你们都是高人,写代码不超过100行。因为只需要一个api就搞定
      

  9.   

    好比有人要写一个聊天软件,你跟他说:"你写10w行,别人一个QQ软件就搞定!"
    有人要写一个编辑器,你跟人说:"你写100w行,别人一个Word就搞定"
      

  10.   


    人家不是说C++转java了么。