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

报告相同问题?

悬赏问题

  • ¥15 关于#网络安全#的问题:求ensp的网络安全,不要步骤要完成版文件
  • ¥15 可否在不同线程中调用封装数据库操作的类
  • ¥20 使用Photon PUN2解决游戏得分同步的问题
  • ¥15 微带串馈天线阵列每个阵元宽度计算
  • ¥15 keil的map文件中Image component sizes各项意思
  • ¥30 BC260Y用MQTT向阿里云发布主题消息一直错误
  • ¥20 求个正点原子stm32f407开发版的贪吃蛇游戏
  • ¥15 划分vlan后,链路不通了?
  • ¥20 求各位懂行的人,注册表能不能看到usb使用得具体信息,干了什么,传输了什么数据
  • ¥15 Vue3 大型图片数据拖动排序