QString decInt2HexStr(int dec);
QByteArray QString2Hex(QString hexStr);
char ConvertHexChar(char c);
QString formatInput(QString hexStr);
QString hexToDec(QString strHex);
int hex2(unsigned char ch);
QString decTobin(QString strDec);
static QString ConvertFromNumber(int number);
QString MainWindow::decInt2HexStr(int dec)
{
if(dec>=0)
{
if(dec > 65535)
{
QMessageBox::information(NULL, "警告", "输入超出规定范围(input < 65535)");
return "0";
}
QString hexStr;
int temp = dec / 16;
int left = dec % 16;
if(temp > 0)
hexStr += decInt2HexStr(temp);
if(left < 10)
hexStr += (left + '0');
else
hexStr += ('A' + left - 10);
return hexStr;
}
else
{
if(dec < -32768 )
{
QMessageBox::information(NULL, "警告", "输入超出规定范围(input > -32768)");
return "0";
}
dec = 65536 - dec*(-1);
QString hexStr;
int temp = dec / 16;
int left = dec % 16;
if(temp > 0)
hexStr += decInt2HexStr(temp);
if(left < 10)
hexStr += (left + '0');
else
hexStr += ('A' + left - 10);
return hexStr;
}
}
QString MainWindow::formatInput(QString hexStr)
{
int strlen = hexStr.length();
switch(strlen)
{
case 0:
hexStr = "0000";
break;
case 1:
hexStr = "000" + hexStr;
break;
case 2:
hexStr = "00" + hexStr;
break;
case 3:
hexStr = "0" + hexStr;
break;
case 4:
hexStr = hexStr;
break;
default:
break;
}
return hexStr;
}
QByteArray MainWindow::QString2Hex(QString hexStr)
{
char cDataHigh,cDataLow;
QByteArray sendData;
int iSendDataSize = 0;
int iSize = hexStr.size();
for(int i = 0;i<iSize-1;)
{
char tempByte_h = hexStr.at(i).toLatin1();
if(tempByte_h == ' ')
{
i+=1;
continue;
}
else
{
char tempByte_l = hexStr.at(i+1).toLatin1();
i+=2;
cDataHigh = ConvertHexChar(tempByte_h);
cDataLow = ConvertHexChar(tempByte_l);
char sendChar =(char)((cDataHigh<<4)+cDataLow);
sendData[iSendDataSize]=sendChar;
iSendDataSize++;
}
}
return sendData;
}
char MainWindow::ConvertHexChar(char c)
{
if((c >= '0') && (c <= '9'))
return c - 0x30;
else if((c >= 'A') && (c <= 'F'))
return c - 'A' + 10;
else if((c >= 'a') && (c <= 'f'))
return c - 'a' + 10;
else
return -1;
}
QString MainWindow::hexToDec(QString strHex)
{
int i;
int v = 0;
for(i=0;i<strHex.length();i++)
{
v*=16;
v+=hex2(strHex[i].toLatin1());
}
return QString::number(v);
}
int MainWindow::hex2(unsigned char ch)
{
if((ch >= '0') && (ch <= '9'))
return ch-0x30;
else if((ch >= 'A') && (ch <= 'F'))
return ch-'A'+10;
else if((ch >= 'a') && (ch <= 'f'))
return ch-'a'+10;
return 0;
}
QString MainWindow::decTobin(QString strDec)
{
int nDec = strDec.toInt();
int nYushu, nShang;
QString strBin, strTemp;
bool bContinue = true;
while ( bContinue )
{
nYushu = nDec % 2;
nShang = nDec / 2;
strBin=QString::number(nYushu)+strBin;
strTemp = strBin;
nDec = nShang;
if ( nShang == 0 )
bContinue = false;
}
int nTemp = strBin.length() % 4;
switch(nTemp)
{
case 1:
strTemp = "000"+strBin;
strBin = strTemp;
break;
case 2:
strTemp = "00"+strBin;
strBin = strTemp;
break;
case 3:
strTemp = "0"+strBin;
strBin = strTemp;
break;
default:
break;
}
return strBin;
}
QString MainWindow:: ConvertFromNumber(int number)
{
QString resultStr = "";
while(number > 0)
{
int k = number % 26;
if(k == 0)
k = 26;
resultStr.push_front(QChar(k + 64));
number = (number - k) / 26;
}
return resultStr;
}