Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/137.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ QChar至uint32_t转换/铸造(Qt)_C++_Qt_Casting_Qstring_Qchar - Fatal编程技术网

C++ QChar至uint32_t转换/铸造(Qt)

C++ QChar至uint32_t转换/铸造(Qt),c++,qt,casting,qstring,qchar,C++,Qt,Casting,Qstring,Qchar,我有一个QString为1500的QChar,我想将其转换为uint32\u t的数组。我正在读取for循环中的每个元素,并尝试将QString的每个QChar保存到uint32\u t数组中。我可以通过data[I].unicode()将其转换为等价的表示形式(例如1->49),但我希望在uint32\t数组形式中使用相同的字符串进行进一步处理 QString data = {1,'A','C',9,8,.....}; uint32_t Test[data.length()] = {0}; f

我有一个
QString
为1500的
QChar
,我想将其转换为
uint32\u t
的数组。我正在读取for循环中的每个元素,并尝试将
QString
的每个
QChar
保存到
uint32\u t
数组中。我可以通过
data[I].unicode()
将其转换为等价的表示形式(例如1->49),但我希望在
uint32\t
数组形式中使用相同的字符串进行进一步处理

QString data = {1,'A','C',9,8,.....};
uint32_t Test[data.length()] = {0};
for (uint32_t i =0; i<data.length(); i++) {
    Test[i] = data[i]; // here i need QChar to uint32_t conversion
}
QString数据={1,'A','C',9,8,…};
uint32_t Test[data.length()]={0};

对于(uint32_t i=0;i考虑到每个
QChar
仅包含16位,由两部分组成:单元格和行,您甚至可以将两个
QChar
s打包成一个
uint32_t
编号。我将按以下方式执行:

QString data("ABCDE");
std::vector<uint32_t> test((data.count() + 1) / 2, 0);

for (int i = 0; i < data.length(); ++i)
{
    const QChar &c = data[i];
    uchar cell = c.cell();
    uchar row = c.row();

    uint32_t &ui32 = test[i / 2];
    if (i % 2 == 0)
    {
        ui32 = cell;
    }
    else
    {
        ui32 <<= 8;
        ui32 |= cell;
    }
    ui32 <<= 8;
    ui32 |= row;
}

我想把
QString
数据项存储在
uint32_t Test[]
数组中。例如,如果我把
QString数据={1,'A','C',9,8,…}
作为输入,而不是作为输出,我想让
uint32_t Test={1,'A','C',9,8,…}

它一点也不复杂。每个
QChar
都是
uint16\u t
的一个薄薄的包装。您只需将它们转换为
uint32\u t
,就完成了

QVector<uint32_t> convert(const QString & str) {
  QVector<uint32_t> output;
  output.reserve(str.size());
  for (auto c : str)
    output.append(c.unicode());
  return output;
}

void user(const uint32_t *, size_t size);

void test(const QString & str) {
  auto const data = convert(str);
  user(data.data(), size_t(data.size());
}

请注意,代码点和代码单位有特定的含义,并且不是同义词。

uint16_t
不是非常适合这种转换的数据类型吗?请注意,
QChar
表示16位。您希望在uint32中保存什么?如UTF8、UTF16或UTF32?另外,请引用QT网站:“QChar类提供一个16位Unicode字符。”我想将其保存为uint32_t。转换后,我将把它传递给另一个只接受uint32_t类型数组的函数。8个QChar的Q字符串可以使用
data.toUInt(nullptr,16)转换为uint32_t类型
但是由于我有一个很长的字符串,我需要分别处理每个单独的项目。请编辑问题来描述你所说的convert这个词的意思。这个词本身几乎毫无意义。
string.touit(…)
是一种将数字的文本表示转换为整数的方法,例如
Q\u ASSERT(QStringLiteral()789ABC”).toUint({},16)=0x789ABC)
。至少,请提供一些转换示例,作为您希望持有的某个
convert
函数的断言。这是一个很好的方法,可以指定您希望所说的
convert
函数执行的操作。我想在
uint32\t Test[]中存储
QString数据的项
array。例如,如果我将
QString数据={1,'A','C',9,8,…}
作为输入,而不是作为输出,我希望将
uint32\u t Test={1,'A','C',9,8,…}
QVector<uint32_t> convert(const QString & str) {
  QVector<uint32_t> output;
  output.reserve(str.size());
  for (auto c : str)
    output.append(c.unicode());
  return output;
}

void user(const uint32_t *, size_t size);

void test(const QString & str) {
  auto const data = convert(str);
  user(data.data(), size_t(data.size());
}
QVector<uint32_t> convert(const QString & str) {
  return str.toUcs4();
}