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