0

ユーザー名を入力する wxwidgets で設計された UI があります。10 進数に変換されるすべての要素の 16 進数の合計が必要です。これは私がやったことです:

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 までの数値を格納できる単なる数値型であるということです。合計で直接使用できます。それを印刷すると、認識可能な文字に変わります。

ここに簡単なプログラムを貼り付けました: http://ideone.com/dqIE5には、文字列内の文字をループして合計する方法を示す 2 つの関数があります。どちらの場合も、文字をループして実行中の合計に追加するだけです。

あなたが示すコードにはいくつかのエラーもあります。初め:

int i;
char name[i];

ここには2つの間違いがあります。初期化せずに使用しようとしますi(値を与えます)。どのくらいの大きnameさになると思いますか?第 2 に、配列のサイズは、コンパイル時に既知の定数でなければなりません。だからあなたは次のようなことができます

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 に答える