(Qt C ++)setw / setfill等价?

时间:2013-07-12 12:23:41

标签: c++ qt int hex

我有一个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");
    }
}

但这不起作用:/

感谢您的时间:)

2 个答案:

答案 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;
}