繁体   English   中英

(Qt C ++)setw / setfill是否等效?

[英](Qt C++) setw/setfill Equivalent?

我有一个菜鸟问题。 我正在尝试将uint转换为十六进制的Qstring。 到目前为止,到目前为止,我希望字符串的宽度为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");
    }
}

但这不起作用:/

谢谢你的时间 :)

我最近正在寻找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字符串将是这样的:

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(如图所示),该文件处理该先前打开的文件中的流。

我回答了我自己的问题。 将其留给以后的提问者。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM