10进制和16进制转换

  • 通过标准库std::stringstream进行10进制和16进制转换
  • 10进制转换成16进制
  • 16进制转换成10进制
  • 通过QString::number()和toInt()、setNumbe()等方法进行转换
  • 10进制转换成16进制
  • 16进制转换成10进制
  • 格式化输出



在项目开发中,如何进行进制转换,提供以下方法:

通过标准库std::stringstream进行10进制和16进制转换

10进制转换成16进制
#include <sstream>  
#include <string>

int decimalNumber = 255;  
std::stringstream ss;  
ss << std::hex << decimalNumber;  // 输出16进制数  
std::string hexNumber = ss.str();  
std::cout << "Decimal: " << decimalNumber << "\n";  
std::cout << "Hexadecimal: " << hexNumber << "\n";  
}
16进制转换成10进制
#include <sstream>  
#include <string>

std::string hexNumber = "FF";  
std::stringstream ss(hexNumber);  
int decimalNumber;  
ss >> std::hex >> decimalNumber;  // 输入16进制数,输出10进制数  
std::cout << "Hexadecimal: " << hexNumber << "\n";  
std::cout << "Decimal: " << decimalNumber << "\n";  
}

通过QString::number()和toInt()、setNumbe()等方法进行转换

10进制转换成16进制

fun1:QString::number()
number()函数是重载函数
static QString number(double, char f=‘g’, int prec=6);第一个参数是值,第二个参数指定数值格式,第三个参数精度
static QString number(int, int base=10);第一个参数是值,第二个参数是基准

int nDecValue = 255;
QString strRes;
strRes = QString::number(nDecValue, 16);
qDebug().noquote() << "10进制转16进制:" << strRes;

输出结果

10进制转16进制: ff

fun2:QString::number().rightJustified()
rightJustified(int width, QChar fill = QLatin1Char(’ ‘), bool trunc = false)函数:右对齐,不足width,左填充fill字符
leftJustified(int width, QChar fill = QLatin1Char(’ '), bool trunc = false)函数:左对齐,不足width,右填充fill字符

int nDecValue = 10;
QString strRes;
strRes = QString::number(nDecValue, 16).rightJustified(2, '0');
qDebug().noquote() << "10进制转16进制:" << strRes;

输出结果

10进制转16进制: 0a

fun3:QString(“%1”).arg()

int nDecValue = 255;
QString strRes;
strRes = QString("%1").arg(nDecValue , 0, 16);
qDebug().noquote() << "10进制转16进制:" << strRes;

输出结果

10进制转16进制: a

fun4:QByteArray::number()

int nNum = 255;
QString strRes;
strRes = QByteArray::number(nNum, 16);
qDebug().noquote() << "10进制转16进制:" << strRes;

输出结果

10进制转16进制: ff

fun5:QString::setNumber()

int nNum = 255;
QString strRes;
strRes = strRes.setNum(nNum, 16);
qDebug().noquote() << "10进制转16进制:" << strRes;

输出结果

10进制转16进制: ff
16进制转换成10进制

fun1:QString::toInt()

QString str = "0xff";
qDebug().noquote() << "16进制转10进制:" << str.toInt(nullptr, 16);

输出结果

16进制转10进制: 255

格式化输出

quint16 num = 0xff;
qDebug().noquote() << "十进制输出: " << QString("%1").arg(num);
// 不足四位补0
qDebug().noquote() << "16进制小写输出: " << QString("%1").arg(num, 4, 16, QLatin1Char('0'));
// 不足四位补0
qDebug().noquote() << "16进制大写输出: " << QString("%1").arg(num, 4, 16, QLatin1Char('0')).toUpper();

// 格式化输出
qDebug().noquote() << "格式化十进制输出: " << QString().sprintf("%d", num);
qDebug().noquote() << "格式化16进制小写输出: " << QString().sprintf("%04x", num);
qDebug().noquote() << "格式化16进制大写输出: " << QString().sprintf("%04X", num);