在向富文本框写入数据时获取字符代码而不是字母text属性

C++: Getting character codes instead of letters when writing data to rich text box Text property

本文关键字:代码 属性 text 字符 获取 文本 数据      更新时间:2023-10-16

我是c++新手,正在Visual Studio中开发一个相对雄心勃勃的Win32应用程序。我遇到的问题是,在主窗口的文本字段显示一个数字,而不是一个字母,当"写"从字符串。

我正在将矢量读取到富文本框中,但文本框显示的不是AA,而是6565。我知道65是"A"的字符代码,但还没能找到如何让窗口显示字母。

这是创建vector的代码。调试此片段表明数据可以正确加载。这段代码是'portfolio'类的一部分。

vector<string> tickers;
string cell;
string line;
ifstream d ("file.csv"); //The file contents look like: AA,AAPL,BAC and so on
if (d.is_open()) {
    getline(d,line);
    stringstream line2(line);
    for (ci=0; ci<c; ci++) { //c is known and is the number of 'columns' in the file I am reading.
      getline(line2,cell,',');
      tickers.push_back(cell);
    }
}

富文本框的名称为"Results2"。设置富文本框的Text属性的代码是:

portfolio p;
int n = p.tickers.size();
for (int i=0; i<n; i++) {
    for (int j=0; j<p.tickers[i].size(); j++) {
        Results2->Text += p.tickers[i][j];
    }
    Results2->Text += "n";
}

我知道"Results2->Text"位是正确的,因为数据在那里很好。问题是,我最后得到:

656565658076

代替:

AAapple

我做错了什么?

提前感谢您的帮助!

这可能是你正在操作的c++/STL字符串和RichTextBox正在使用的c++/CLI字符串之间的编组问题。

编辑

问题是你把字符一个接一个地放在RichTextBox::Text,或者这个字段期望一个System::String,所以它将每个字符转换为一个整数值到String,然后把它放在文本框中,这就是为什么你得到ASCII数字而不是字符串。

由于portfolio::tickers是您在评论中指定的vector<std::string>,您可以在将每个std::string转换为char*之前将其提供给RichTextBox::Text:

portfolio p;
for (int i=0; i<p.tickers.size(); i++) {
    Results2->Text += gcnew String(p.tickers[i].c_str());
    Results2->Text += "n";
}

您也可以使用VC2008中引入的marshal_as:

Results2->Text += marshal_as<String^>(p.tickers[i].c_str());