李多肉同学 2017-06-20 03:20 采纳率: 0%
浏览 743
已结题

求大神帮忙将C代码转换为java。

typedef struct _TIME_LIMIT2
{
BYTE bSN[8];
DWORD expireTime;
} TIME_LIMIT2;

CString CMyUSBKey::GenDateLimit(CString strSn,CTime expirTime)
{
TIME_LIMIT2 limit;
limit.bSN[0] = 'k';
limit.bSN[2] = 'a';
limit.bSN[4] = 0x85;
limit.bSN[6] = 0xA1;
srand( (unsigned)time( NULL ) );
limit.bSN[1] = rand();
limit.bSN[3] = rand();
limit.bSN[5] = rand();
limit.bSN[7] = 0;
for (int i=0;i<7;i++)
{
limit.bSN[7] += limit.bSN[i];
} 前8个字节初始值
BYTE SN[8];
for (int i=0;i<8;i++)
{
int tmp;
_stscanf_s(strSn.GetBuffer()+i*2,_T("%2x"),&tmp);
SN[i] = (BYTE)tmp;
} 读取8字节SN码
for (int i=0;i<8;i++)
{
limit.bSN[i] ^= SN[i]; 前8个字节初始值和8位SN码异或运算
}
//C51中与PC的顺序相反,需要先颠倒顺序
limit.expireTime = (DWORD)expirTime.GetTime(); 将到期时间转换成4字节整数
limit.expireTime ^= 0x55AA55AA; 到期时间异或
FlipBuffer(&limit.expireTime, sizeof(DWORD)); 前后字节翻转,因为单片机和计算机整数存储顺序不一致
CString strLicense;
CString tmp;
for (int i=0;i<12;i++)
{
tmp.Format(_T("%02X"),limit.bSN[i]); 将许可码转换成字符串
strLicense += tmp;
}
return strLicense;
}

时间许可限制,时、分、秒分别是:m_strSN.GetAt(13)%24,m_strSN.GetAt(14)%60,m_strSN.GetAt(15)%60
m_expireTime = CTime(m_expireTime.GetYear(),m_expireTime.GetMonth(),m_expireTime.GetDay(),m_strSN.GetAt(13)%24,m_strSN.GetAt(14)%60,m_strSN.GetAt(15)%60);

  • 写回答

1条回答 默认 最新

  • zhaorui2017 2017-06-20 03:28
    关注
    评论

报告相同问题?