我有一个noob问题。我正在尝试将uint转换为Qstring为hex。到目前为止,这么好,我希望字符串的宽度为8个字符长。在没有Qt的过去,我只使用了setw(8)和setfill('0'),但它似乎在Qt中不存在?
因此...
a would be 0000000a
15 would be 00000015
我该怎么做呢?
我目前的IntToHex功能:
void IntToHex(int num_int, QString &num_hex, int width)
{
uint num_uint = num_int;
num_hex.setNum(num_uint,16);
if(num_hex.length()<width)
{
for(int i=1; i<=num_hex.length()-width; i++)
num_hex.insert(0, "0");
}
}
但这不起作用:/
感谢您的时间:)
答案 0 :(得分:1)
我最近在寻找Qt中的setw()等效(用于测试目的)。等价物是QTextStream中的read()方法。但使用的方式有点不同。
例如,如果您的文件中的日期格式为年 - 月 - 日(2014-10-20),如果您想要读取该日期,但将其存储为单独的值年,月一天,在C ++中会是这样的:
if(myfile.is_open())
{
while (!myfile.eof())
{
myfile >> setw(4) >> year >>
setw(1) >> dummy >> // separation char
setw(2) >> month >>
setw(1) >> dummy >> // another separation char
setw(2) >> day;
}
}
使用Qt Strings时会是这样的:
if (myfile.open(QIODevice::ReadOnly | QIODevice::Text))
{
QTextStream in(&myfile);
while( !in.atEnd()){
year = in.read(4);
dummy = in.read(1); // separation char
month = in.read(2);
dummy = in.read(1); // another separation char
day = in.read(2);
}
}
或者您可以读取整个块甚至文件,然后手动处理和拆分数据。一个注释,与C ++标准不同,所有文件操作都是在ifstream / ofstream创建的流上完成的,Qt将其拆分为2个单独的操作。一个是对文件的访问,由执行 QFile及其方法,另一个是QTextStream(显示),用于处理先前打开的文件中的流。
答案 1 :(得分:0)
我回答了自己的问题。留在这里为未来的提问者。
void IntToHex(int num_int, QString &num_hex, int width)
{
num_hex = QString::number(num_int, 16);
if(num_hex.size()<width) num_hex = QString(width-num_hex.size(), '0')+num_hex;
}