从 QString 获取 ASCII 值并替换为其他 ASCII
Get ASCII value from QString and replace it with other ASCII
我需要从每个 QString 的元素中获取 ASCII 值,然后替换它
与其他 ASCII。
我有这些 QString:QString s = ui->lineEdit_3->text();
和 QString k = ui->lineEdit_2->text();
,然后我将 s 转换为 Latin1 s.at(i).toLatin1();
但是当我打印 f
时,没有任何反应。
这是我的代码:
QString s = ui->lineEdit_3->text();
QString k = ui->lineEdit_2->text();
QString f;
k.toInt();
s.toStdString();
for(int i; i<=s.length(); i++)
{
f.append(QChar(s.at(i).toLatin1()+k.toInt()));
}
ui->lineEdit->setText(f);
提前致谢!
下面的示例演示了一种解决方案。 Offset 控件确定字符代码与原始值的偏移量。不需要转换为 ASCII:Unicode 代码点对应于 ASCII,两者的范围重叠(即 32 到 127,包括在内)。 Modulo printable ASCII range 选项通过对范围执行加法使结果保持在可打印的 ASCII 范围内(即结果被换行以适合范围)。
// https://github.com/KubaO/Whosebugn/tree/master/questions/ascii-add-ui-51639347
#include <QtWidgets>
int main(int argc, char *argv[]) {
QApplication a(argc, argv);
QWidget ui;
QFormLayout layout(&ui);
QLineEdit input("Hello, World!");
QLabel output;
QLineEdit offset;
QIntValidator offsetValidator(-65535, 65535);
QCheckBox ascii("Modulo printable ASCII range 32-127");
output.setFrameShape(QFrame::Panel);
layout.addRow("Input Text", &input);
layout.addRow("Output", &output);
layout.addRow("Offset", &offset);
layout.addRow(&ascii);
layout.setFieldGrowthPolicy(QFormLayout::AllNonFixedFieldsGrow);
offset.setValidator(&offsetValidator);
offset.setPlaceholderText("0");
ascii.setChecked(true);
ui.show();
auto const calculate = [&] {
bool limit = ascii.isChecked();
auto text = input.text();
int delta = offset.text().toInt();
for (QChar &ch : text) {
auto doLimit = limit && ch >= 32 && ch <= 127;
ch = {ch.unicode() + delta};
if (doLimit) ch = {((ch.unicode() - 32) % (128 - 32)) + 32};
}
output.setText(text);
};
for (auto ed : {&input, &offset})
QObject::connect(ed, &QLineEdit::textChanged, calculate);
QObject::connect(&ascii, &QCheckBox::toggled, calculate);
offset.setText("1");
return a.exec();
}
我需要从每个 QString 的元素中获取 ASCII 值,然后替换它
与其他 ASCII。
我有这些 QString:QString s = ui->lineEdit_3->text();
和 QString k = ui->lineEdit_2->text();
,然后我将 s 转换为 Latin1 s.at(i).toLatin1();
但是当我打印 f
时,没有任何反应。
这是我的代码:
QString s = ui->lineEdit_3->text();
QString k = ui->lineEdit_2->text();
QString f;
k.toInt();
s.toStdString();
for(int i; i<=s.length(); i++)
{
f.append(QChar(s.at(i).toLatin1()+k.toInt()));
}
ui->lineEdit->setText(f);
提前致谢!
下面的示例演示了一种解决方案。 Offset 控件确定字符代码与原始值的偏移量。不需要转换为 ASCII:Unicode 代码点对应于 ASCII,两者的范围重叠(即 32 到 127,包括在内)。 Modulo printable ASCII range 选项通过对范围执行加法使结果保持在可打印的 ASCII 范围内(即结果被换行以适合范围)。
// https://github.com/KubaO/Whosebugn/tree/master/questions/ascii-add-ui-51639347
#include <QtWidgets>
int main(int argc, char *argv[]) {
QApplication a(argc, argv);
QWidget ui;
QFormLayout layout(&ui);
QLineEdit input("Hello, World!");
QLabel output;
QLineEdit offset;
QIntValidator offsetValidator(-65535, 65535);
QCheckBox ascii("Modulo printable ASCII range 32-127");
output.setFrameShape(QFrame::Panel);
layout.addRow("Input Text", &input);
layout.addRow("Output", &output);
layout.addRow("Offset", &offset);
layout.addRow(&ascii);
layout.setFieldGrowthPolicy(QFormLayout::AllNonFixedFieldsGrow);
offset.setValidator(&offsetValidator);
offset.setPlaceholderText("0");
ascii.setChecked(true);
ui.show();
auto const calculate = [&] {
bool limit = ascii.isChecked();
auto text = input.text();
int delta = offset.text().toInt();
for (QChar &ch : text) {
auto doLimit = limit && ch >= 32 && ch <= 127;
ch = {ch.unicode() + delta};
if (doLimit) ch = {((ch.unicode() - 32) % (128 - 32)) + 32};
}
output.setText(text);
};
for (auto ed : {&input, &offset})
QObject::connect(ed, &QLineEdit::textChanged, calculate);
QObject::connect(&ascii, &QCheckBox::toggled, calculate);
offset.setText("1");
return a.exec();
}