1

我有一个菜鸟问题要问你。我正在尝试将 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");
    }
}

但这不起作用:/

谢谢你的时间 :)

4

2 回答 2

2

我回答了我自己的问题。留在这里给未来的提问者。

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;
}
于 2013-07-12T13:11:44.780 回答
2

我最近在 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);
     }
}

或者您可以读取整个块甚至文件,然后手动处理和拆分数据。注意,与所有文件操作都在 ifstream/ofstream 创建的流上完成的 C++ 标准不同,Qt 将其拆分为 2 个单独的操作。一种是对文件的访问,由 QFile 及其方法执行,另一种是处理先前打开的文件中的流的 QTextStream(如图所示)。

于 2014-11-15T23:31:16.680 回答