C ++:转换Win32文本框char - > int - > char并放回另一个文本框中

时间:2016-09-12 03:44:00

标签: c++ winapi textbox

我希望使用文本框接受文本输入,然后将字符更改为整数,并使用我的整数进行有趣的数学运算,然后将它们放回到char数组中,以便在另一个文本框中打印。

这是我的代码:

int len = GetWindowTextLength(textbox) + 1;
char* text = new char[len];
GetWindowText(textbox, &text[0], len);

int x = 0;
int INTmessage[len];
int ENClen = (len * 2);
char ENCmessage[ENClen];

while (x < len) {
    INTmessage[x] = int(text[x]) - 32;
    x++;
}

int z = 0;
int y = 0;

while (z < ENClen) {
    ENCmessage[z] = (INTmessage[y] % 9);
    ENCmessage[z + 1] = (INTmessage[y] % 10);

    z += 2;
    y++;
}

SetWindowText(textreturn, "");
SetWindowText(textreturn, ENCmessage[0]);

最后一行显示编译器错误:

  

从“char”无效转换为LPCSTR。

2 个答案:

答案 0 :(得分:1)

请说明你的意思'我不知道为什么这不起作用'。代码中的一个错误是:

//This line is incorrect because it converts an address to integer, which has no relation to value of textbox, making decryption impossible.
INTmessage[x] = int(&text[x]) - 32;
//Maybe you may want to use this code: 
INTmessage[x] = int(text[x]) - 32;

答案 1 :(得分:0)

最后一行失败是因为您将char传递给SetWindowText()(访问ENCmessage[0]会返回char数组中的第一个ENCmessageSetWindowText()期望char*指向以空字符结尾的字符串。您可以删除[0]

SetWindowText(textreturn, ENCmessage);

只需确保ENCmessage包含数字字符后的空字符。

话虽这么说,你的代码可以重写为更像这样的东西:

int len = GetWindowTextLength(textbox) + 1;
char* text = new char[len];
len = GetWindowText(textbox, text, len);

int *INTmessage = new int[len];
for(int x = 0; x < len; ++x) {
    INTmessage[x] = int(text[x]) - 32;
}

int ENClen = (len * 2) + 1;
char *ENCmessage = new char[ENClen];

for(int x = 0, y = 0; x < len; ++x, y += 2) {
    ENCmessage[y] = (INTmessage[x] % 9);
    ENCmessage[y + 1] = (INTmessage[x] % 10);
}
ENCmessage[ENCLen-1] = '\0';

SetWindowText(textreturn, ENCmessage);

delete[] INTmessage;
delete[] ENCmessage;
delete[] text;

或者,因为您将问题标记为C ++,而不是像这样:

#include <string>
#include <vector>

int len = GetWindowTextLength(textbox) + 1;
std::string text;
text.resize(len);
len = GetWindowText(textbox, &text[0], len);

std::vector<int> INTmessage(len);

for(int x = 0; x < len; ++x) {
    INTmessage[x] = int(text[x]) - 32;
}

int ENClen = (len * 2);
std::string ENCmessage;
ENCmessage.resize(ENClen);

for (int x = 0; y = 0; x < len; ++x, y += 2) {
    ENCmessage[y] = (INTmessage[x] % 9);
    ENCmessage[y + 1] = (INTmessage[x] % 10);
}

SetWindowText(textreturn, ENCmessage.c_str());