📄 floattooldlg.cpp
字号:
{
m_OutputType = CFloatToolDlg::HEX;
Convert();
}
void CFloatToolDlg::OnBnClickedFloat2()
{
m_OutputType = CFloatToolDlg::FLOAT;
Convert();
}
void CFloatToolDlg::OnBnClickedDec2()
{
m_OutputType = CFloatToolDlg::DEC;
Convert();
}
void CFloatToolDlg::OnBnClickedDouble2()
{
m_OutputType = CFloatToolDlg::DOUBLE;
Convert();
}
void CFloatToolDlg::OnBnClickedLongDouble2()
{
m_OutputType = CFloatToolDlg::LONG_DOUBLE;
Convert();
}
void CFloatToolDlg::OnBnClickedBin2()
{
m_OutputType = CFloatToolDlg::BIN;
Convert();
}
void CFloatToolDlg::OnBnClickedButton1()
{
Convert();
}
void CFloatToolDlg::ClearFloatStr(void)
{
m_SignBit = _T("");
m_DecMantissa = _T("");
m_HexMantissa = _T("");
m_DecExponent = _T("");
m_HexExponent = _T("");
m_2Exponent = _T("");
m_2Mantissa = _T("");
}
void CFloatToolDlg::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
CDialog::OnChar(nChar, nRepCnt, nFlags);
}
void CFloatToolDlg::OnBnClickedCancel()
{
m_InputStr.SetWindowText(_T(""));
Convert();
}
void CFloatToolDlg::OnBnClickedClearInput()
{
OnBnClickedCancel();
}
void CFloatToolDlg::OnBnClickedQuit()
{
OnCancel();
}
void CFloatToolDlg::OutputResult(tstring ostring)
{
tstring tmps = ostring;
char cseperator = _T('\0');
if (m_Seperator == CFloatToolDlg::NO_SEPERATOR)
{
tmps = ostring;
}
else
{
if (m_Seperator == CFloatToolDlg::SPACE_SEPERATOR)
cseperator = _T(' ');
if (m_Seperator == CFloatToolDlg::COMMA_SEPERATOR)
cseperator = _T(',');
reverse(tmps.begin(),tmps.end());
tstring::iterator beg = tmps.begin();
int i =1;
while (beg != tmps.end())
{
if (i%5 == 0)
{
beg = tmps.insert(beg,cseperator);
}
beg++;
i++;
}
reverse(tmps.begin(),tmps.end());
}
m_OutputStr.SetWindowText(tmps.c_str());
}
void CFloatToolDlg::OnBnClickedNoSeperator()
{
m_Seperator = CFloatToolDlg::NO_SEPERATOR;
Convert();
}
void CFloatToolDlg::OnBnClickedSpaceSeperator()
{
m_Seperator = CFloatToolDlg::SPACE_SEPERATOR;
Convert();
}
void CFloatToolDlg::OnBnClickedCommaSeperator()
{
m_Seperator = CFloatToolDlg::COMMA_SEPERATOR;
Convert();
}
void CFloatToolDlg::EnableAllItem(void)
{
CButton *pchk;
pchk = (CButton *)GetDlgItem(IDC_SIZE2);
pchk->EnableWindow(TRUE);
pchk = (CButton *)GetDlgItem(IDC_SIZE4);
pchk->EnableWindow(TRUE);
pchk = (CButton *)GetDlgItem(IDC_SIZE8);
pchk->EnableWindow(TRUE);
pchk = (CButton *)GetDlgItem(IDC_SIZE10);
pchk->EnableWindow(TRUE);
pchk = (CButton *)GetDlgItem(IDC_SIZE16);
pchk->EnableWindow(TRUE);
pchk = (CButton *)GetDlgItem(IDC_DOUBLE2);
pchk->EnableWindow(TRUE);
pchk = (CButton *)GetDlgItem(IDC_FLOAT2);
pchk->EnableWindow(TRUE);
//pchk = (CButton *)GetDlgItem(IDC_NO_SEPERATOR);
//pchk->EnableWindow(TRUE);
pchk = (CButton *)GetDlgItem(IDC_SPACE_SEPERATOR);
pchk->EnableWindow(TRUE);
pchk = (CButton *)GetDlgItem(IDC_COMMA_SEPERATOR);
pchk->EnableWindow(TRUE);
}
void CFloatToolDlg::SetInterFaceItem(void)
{
CButton *pchk;
EnableAllItem();
switch(m_Type)
{
case CFloatToolDlg::HEX:
case CFloatToolDlg::DEC:
case CFloatToolDlg::BIN:
{
}
break;
case CFloatToolDlg::FLOAT:
case CFloatToolDlg::DOUBLE:
{
pchk = (CButton *)GetDlgItem(IDC_SIZE2);
pchk->SetCheck(BST_UNCHECKED);
pchk->EnableWindow(FALSE);
pchk = (CButton *)GetDlgItem(IDC_SIZE4);
pchk->SetCheck(BST_UNCHECKED);
pchk->EnableWindow(FALSE);
pchk = (CButton *)GetDlgItem(IDC_SIZE8);
pchk->SetCheck(BST_UNCHECKED);
pchk->EnableWindow(FALSE);
pchk = (CButton *)GetDlgItem(IDC_SIZE10);
pchk->SetCheck(BST_UNCHECKED);
pchk->EnableWindow(FALSE);
pchk = (CButton *)GetDlgItem(IDC_SIZE16);
pchk->SetCheck(BST_UNCHECKED);
pchk->EnableWindow(FALSE);
if (m_Type == CFloatToolDlg::FLOAT )
{
m_Size = 4;
pchk = (CButton *)GetDlgItem(IDC_SIZE4);
pchk->EnableWindow(TRUE);
pchk->SetCheck(BST_CHECKED);
}
else
{
m_Size = 8;
pchk = (CButton *)GetDlgItem(IDC_SIZE8);
pchk->EnableWindow(TRUE);
pchk->SetCheck(BST_CHECKED);
}
}
break;
default:
AddError(ERR_SWITCH_DEFAULT);
break;
};
switch(m_Size)
{
case 2:
case 10:
case 16:
{
pchk = (CButton *)GetDlgItem(IDC_DOUBLE2);
pchk->SetCheck(BST_UNCHECKED);
pchk->EnableWindow(FALSE);
pchk = (CButton *)GetDlgItem(IDC_FLOAT2);
pchk->SetCheck(BST_UNCHECKED);
pchk->EnableWindow(FALSE);
if (m_OutputType == CFloatToolDlg::DOUBLE
|| m_OutputType == CFloatToolDlg::FLOAT)
{
m_OutputType = CFloatToolDlg::HEX;
pchk = (CButton *)GetDlgItem(IDC_HEX2);
pchk->SetCheck(BST_CHECKED);
}
}
break;
case 4:
{
if (m_OutputType == CFloatToolDlg::DOUBLE )
{
m_OutputType = CFloatToolDlg::HEX;
pchk = (CButton *)GetDlgItem(IDC_HEX2);
pchk->SetCheck(BST_CHECKED);
};
pchk = (CButton *)GetDlgItem(IDC_DOUBLE2);
pchk->SetCheck(BST_UNCHECKED);
pchk->EnableWindow(FALSE);
pchk = (CButton *)GetDlgItem(IDC_FLOAT2);
// pchk->SetCheck(BST_UNCHECKED);
pchk->EnableWindow(TRUE);
}
break;
case 8:
{
if (m_OutputType == CFloatToolDlg::FLOAT )
{
m_OutputType = CFloatToolDlg::HEX;
pchk = (CButton *)GetDlgItem(IDC_HEX2);
pchk->SetCheck(BST_CHECKED);
};
pchk = (CButton *)GetDlgItem(IDC_FLOAT2 );
pchk->SetCheck(BST_UNCHECKED);
pchk->EnableWindow(FALSE);
pchk = (CButton *)GetDlgItem(IDC_DOUBLE2);
pchk->EnableWindow(TRUE);
}
break;
default:
AddError(ERR_SWITCH_DEFAULT);
};
switch(m_OutputType)
{
case CFloatToolDlg::HEX:
case CFloatToolDlg::DEC:
case CFloatToolDlg::BIN:
{
}
break;
case CFloatToolDlg::FLOAT:
case CFloatToolDlg::DOUBLE:
{
pchk = (CButton *)GetDlgItem(IDC_SPACE_SEPERATOR);
pchk->SetCheck(BST_UNCHECKED);
pchk->EnableWindow(FALSE);
pchk = (CButton *)GetDlgItem(IDC_COMMA_SEPERATOR);
pchk->SetCheck(BST_UNCHECKED);
pchk->EnableWindow(FALSE);
pchk = (CButton *)GetDlgItem(IDC_NO_SEPERATOR);
pchk->SetCheck(BST_CHECKED);
m_Seperator = CFloatToolDlg::NO_SEPERATOR;
}
break;
default:
AddError(ERR_SWITCH_DEFAULT);
break;
};
}
tstring CFloatToolDlg::GetInputStr(void)
{
CString in;
m_InputStr.GetWindowText(in);
tstring sdelSpace(in.GetBuffer());
in.ReleaseBuffer();
return sdelSpace;
}
tstring CFloatToolDlg::Filter(const tstring& s)
{
tstring sdelSpace = s;
tstring::iterator beg = sdelSpace.begin();
while (beg != sdelSpace.end())
{
if (*beg == _T(' ') || *beg == _T(',') )
beg = sdelSpace.erase(beg);
else
beg++;
}
beg = sdelSpace.begin();
while (beg != sdelSpace.end())
{
if (*beg == _T('0'))
beg = sdelSpace.erase(beg);
else
break;
}
return sdelSpace;
}
BOOL CFloatToolDlg::GetInput(tstring in)
{
tstring sdelSpace = Filter(in);
if ( sdelSpace.empty())
{
AddError(ERR_CLEAR_OUTPUT);
return FALSE;
}
DWORD ret;
BOOL isSucessful = FALSE;
tistringstream istr(sdelSpace);
memset(&m_m128, 0, sizeof(m_m128));
switch(m_Size)
{
case 10:
case 16:
ret = m_BigInt.AtoI(sdelSpace, m_Type, m_Size);
if (ret == ERR_SUCCESS)
{
isSucessful = TRUE;
}
else
{
AddError(ret);
}
break;
default:
switch(m_Type)
{
case CFloatToolDlg::HEX :
{
istr>> hex ;
switch(m_Size)
{
case 2:
{
istr>> m_m128.m128i.m128i_u16[0];
break;
}
case 4:
{
istr>> m_m128.m128i.m128i_u32[0];
break;
}
//case 6:
// {
// break;
//2 }
case 8:
{
istr>> m_m128.m128i.m128i_u64[0];
break;
}
default:
AddError(ERR_SWITCH_DEFAULT) ;
break;
}
break;
}
case CFloatToolDlg::DEC :
{
istr>> dec ;
switch(m_Size)
{
case 2:
{
istr>> m_m128.m128i.m128i_i16[0];
break;
}
case 4:
{
istr>> m_m128.m128i.m128i_i32[0];
break;
}
//case 6:
// {
// break;
//2 }
case 8:
{
istr>> m_m128.m128i.m128i_i64[0];
break;
}
default:
AddError(ERR_SWITCH_DEFAULT) ;
break;
}
break;
}
case CFloatToolDlg::BIN :
{
if (m_Size < 9)
{
reverse(sdelSpace.begin(),sdelSpace.end());
int len = sdelSpace.length();
if (len <= m_Size*8)
{
for ( int i=0; i< m_Size*8 && i < len; i++)
{
if ( sdelSpace[i] == _T('1'))
{
m_m128.m128i.m128i_u32[i/32] |= (1 << (i%32)) ;
}
else
{
if ( sdelSpace[i] == _T('0'))
{
}
else
{
AddError(ERR_INVALID_FORMAT);
break;
}
}
}
isSucessful = TRUE;
}
else
{
AddError(ERR_DATA_SIZE);
}
}
break;
}
case CFloatToolDlg::FLOAT :
{
istr>> m_m128.m128f.m128_f32[0];
break;
}
case CFloatToolDlg::DOUBLE :
{
istr>> m_m128.m128d.m128d_f64[0];
break;
}
case CFloatToolDlg::LONG_DOUBLE :
{
istr>> m_m128.m128d.m128d_f64[0];
break;
}
default:
AddError(ERR_SWITCH_DEFAULT) ;
}
} //switch(m_Size)
if (!isSucessful)
{
if (istr.fail() || istr.bad() || (!istr.eof()))
{
AddError(ERR_INVALID_FORMAT);
}
}
if (GetLastError() == ERR_NO_FOUND_ERROR)
return TRUE;
else
return FALSE;
}
void CFloatToolDlg::OutputMsg(const tstring & msg)const
{
//m_OutputStr.SetWindowText((msg.c_str())) ;
CEdit *pchk;
pchk = (CEdit *)GetDlgItem(IDC_OUT_BIN2);
pchk->SetWindowText(msg.c_str()) ;
}
void CFloatToolDlg::Convert(void)
{
SetInterFaceItem();
if (GetInput(GetInputStr()))
{
GenOutput();
}
if (GetLastError() != ERR_NO_FOUND_ERROR)
{
if (GetLastError() == ERR_CLEAR_OUTPUT)
{
OutputMsg(tstring(_T("")));
}
else
{
ReportAllError();
}
ClearAllError();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -