📄 idcalculate.cpp
字号:
// IDCalculate.cpp : implementation file
//
#include "stdafx.h"
#include "test.h"
#include "IDCalculate.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CIDCalculate dialog
CIDCalculate::CIDCalculate(CWnd* pParent /*=NULL*/)
: CDialog(CIDCalculate::IDD, pParent)
{
//{{AFX_DATA_INIT(CIDCalculate)
m_strIDByte = _T("");
m_bExtFrameType = false;
//}}AFX_DATA_INIT
}
void CIDCalculate::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CIDCalculate)
DDX_Text(pDX, IDC_EDIT_ID, m_strIDByte);
DDV_MaxChars(pDX, m_strIDByte, 12);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CIDCalculate, CDialog)
//{{AFX_MSG_MAP(CIDCalculate)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CIDCalculate message handlers
void CIDCalculate::OnOK()
{
// TODO: Add extra validation here
UpdateData(TRUE);
ConvertFromIDByteToID(m_strIDByte,m_strID);
CDialog::OnOK();
}
BOOL CIDCalculate::OnInitDialog()
{
CDialog::OnInitDialog();
// TODO: Add extra initialization here
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
void CIDCalculate::ConvertFromIDByteToID(CString strIDByte,CString &strID)
{
unsigned char Data[4] = {0,0,0,0};
char szData[25];
BYTE datalen=0;
if(strIDByte.GetLength()==0)
{
AfxMessageBox("请输入数据!");
return;
}
if(strIDByte.GetLength()>12)
{
AfxMessageBox("ID值超过范围!");
return;
}
datalen=(strIDByte.GetLength()+1)/3;
strcpy(szData,(LPCTSTR)strIDByte);
strtodata((unsigned char*)szData,Data,datalen,1);
unsigned int iID;
unsigned char* p = NULL;
p = (unsigned char*)&iID;
*(p + 3) = Data[0];
*(p + 2) = Data[1];
*(p + 1) = Data[2];
*(p + 0) = Data[3];
if(m_bExtFrameType)
iID = iID >> 3;
else
iID = iID >> 5;
CString strTem;
strTem.Format("%x",iID);
strID = strTem;
}
void CIDCalculate::ConvertFromIDToIDByte(CString &strIDByte,CString strID)
{
CString strTem;
unsigned int iID;
char szFrameID[9];
unsigned char FrameID[4] = {0,0,0,0};
if(strID.GetLength()>8)
{
AfxMessageBox("ID超范围!");
return;
}
memset(szFrameID,'0',9);
memcpy(&szFrameID[8 - strID.GetLength()],(LPCTSTR)strID,strID.GetLength());
strtodata((unsigned char*)szFrameID,FrameID,4,0);
if(m_bExtFrameType)
{
iID = ((DWORD)FrameID[0]<<24)+((DWORD)FrameID[1]<<16)+((DWORD)FrameID[2]<<8)+
((DWORD)FrameID[3]);
}
else
{
iID = ((DWORD)FrameID[2]<<8)+((DWORD)FrameID[3]);
}
if(m_bExtFrameType)
iID = iID << 3;
else
iID = iID << 5;
unsigned char *p = NULL;
p = (unsigned char*)&iID;
if(m_bExtFrameType)
strTem.Format("%02x %02x %02x %02x ",*(p + 3),*(p + 2),*(p + 1),*(p + 0));
else
strTem.Format("%02x %02x ",*(p + 1),*(p + 0));
strIDByte = strTem;
}
int CIDCalculate::strtodata(unsigned char *str, unsigned char *data,int len,int flag)
{
unsigned char cTmp=0;
int i=0;
for(int j=0;j<len;j++)
{
if(chartoint(str[i++],&cTmp))
return 1;
data[j]=cTmp;
if(chartoint(str[i++],&cTmp))
return 1;
data[j]=(data[j]<<4)+cTmp;
if(flag==1)
i++;
}
return 0;
}
int CIDCalculate::chartoint(unsigned char chr, unsigned char *cint)
{
unsigned char cTmp;
cTmp=chr-48;
if(cTmp>=0&&cTmp<=9)
{
*cint=cTmp;
return 0;
}
cTmp=chr-65;
if(cTmp>=0&&cTmp<=5)
{
*cint=(cTmp+10);
return 0;
}
cTmp=chr-97;
if(cTmp>=0&&cTmp<=5)
{
*cint=(cTmp+10);
return 0;
}
return 1;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -