0

我有一个用 wxwidgets 设计的 UI,我在其中输入用户名。我想要所有元素的十六进制总和,然后将其转换为十进制。这就是我所做的:

wxArrayString TextAlia = wxT("");//declared global

    TextBox1 = new wxTextCtrl(this, TEXT_BOX1, wxT(""), wxPoint(300, 10), wxSize(100, 20), wxTE_PROCESS_ENTER | wxTE_PROCESS_TAB | wxTE_LEFT, wxDefaultValidator, wxT("WxTextBox"));


void MyFrame::OnGenerateKey(wxCommandEvent& WXUNUSED(event)) {
int i;
char name[i];

TextAlia = TextBox1->GetValue();

i = strlen(TextAlia);
for (i = 0; i < strlen(TextAlia); i++) {


char buffer[3];char Temp[3];

_itoa( name[i], buffer, 16 );

 }

这是我试图做的,请帮助我。

现在 id 所做的是:

int lengtharray = sizeof(name)/sizeof(name[0]);

for (int j=0; j<lengtharray; j++)
{
   name[j] = ?//i need to write something here so that the name[1] is changed to 45 for     
  capital "E"
  // avariable may be of type hex just like sum that keeps on incrementing the value

}
4

2 回答 2

2

如果我理解正确,您想对字符串中字符的数字表示求和。我对 wxwidgets 不熟悉,我认为它使用自己的字符串类型,但我将展示如何使用 c 风格的字符串和 c++ 来做到这一点std::string。首先要注意的是,char它只是一个数字类型,至少能够存储数字 0 到 127。你可以直接在 sum 中使用它。只是当您将其打印出来时,它才会变成可识别的字母。

我在这里粘贴了一个简单的程序:http: //ideone.com/dqIE5,其中有两个函数显示如何循环字符串中的字符并将它们求和。在这两种情况下,您只需对字符进行循环,添加到运行总和。

您显示的代码中也有几个错误。第一的:

int i;
char name[i];

这里有两个错误。您尝试使用i而不初始化它(给它一个值)。你期望有多大name?其次,数组的大小必须是一个常数,在编译时就知道了。所以你可以做类似的事情

const int i = 10;
char name[i];

另一个可能的错误:

i = strlen(TextAlia);
for (i = 0; i < strlen(TextAlia); i++) {

您设置i为 的长度,TextAlia然后立即将其设置为0。然后strlen一遍又一遍地打电话。也许你想要:

int length = strlen(TextAlia);
for (i = 0; i < length; ++i) {
于 2012-07-18T10:00:26.617 回答
1
i = strlen(TextAlia);
int sum = 0;
for (int j = 0; j < i; ++j) {
    sum += TextAlia[j]
}

char* a = new char[40];
sprintf(a, "%d", sum); // decimal value
sprintf(a, "%x", sum); // hexadecimal value
于 2012-07-18T09:51:29.473 回答