李多肉同学 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
    关注
    评论

报告相同问题?

悬赏问题

  • ¥50 永磁型步进电机PID算法
  • ¥15 sqlite 附加(attach database)加密数据库时,返回26是什么原因呢?
  • ¥88 找成都本地经验丰富懂小程序开发的技术大咖
  • ¥15 如何处理复杂数据表格的除法运算
  • ¥15 如何用stc8h1k08的片子做485数据透传的功能?(关键词-串口)
  • ¥15 有兄弟姐妹会用word插图功能制作类似citespace的图片吗?
  • ¥200 uniapp长期运行卡死问题解决
  • ¥15 latex怎么处理论文引理引用参考文献
  • ¥15 请教:如何用postman调用本地虚拟机区块链接上的合约?
  • ¥15 为什么使用javacv转封装rtsp为rtmp时出现如下问题:[h264 @ 000000004faf7500]no frame?