2012-07-18 24 views
0

我有一个用wxwidgets设计的用户界面,我在其中输入用户名。我想要所有元素的十六进制和,然后将其转换为十进制。这是我所做的:计算字符串/数组的元素的十六进制,然后将它们转换为十进制

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 

} 
+0

你真的想用用户名做什么?目前尚不清楚。 – BoBTFish 2012-07-18 09:26:01

+0

是什么问题? – PermanentGuest 2012-07-18 09:26:50

+0

我想要的用户名称是用户名称的字符必须更改为十六进制值,然后应该有这些十六进制值的总和 – 2012-07-18 09:29:53

回答

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 
+0

让我试试这个 – 2012-07-18 09:52:02

+2

你的意思是'sum + = name [j]'。晦涩的变量命名的垮台。 – tinman 2012-07-18 09:54:10

+0

@安顿罗斯:你看我不明白你为什么写了名字[j]我在TextAliaso中有字符串为什么说名字[i] – 2012-07-18 09:55:54

2

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

我在这里贴了一个简单的程序: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++) { 

您设置iTextAlia长度,然后立即将其设置为0。然后一遍又一遍地拨打strlen。也许你想要:

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

+1:好点,我错过了第一个错误 – 2012-07-18 10:08:34

相关问题