-1

CのWindows API設計のテキストボックスから入力された整数値を取得して文字列に変換し、これらの値をCの静的ラベルを介して16進数で表示するにはどうすればよいですか.

コード:

    GetWindowText(hwndtext1, hexval, 256);

    for (i = sizeof(hexval); i >= 0; i--)
      {     
        buf[i] = atoll(hexval);

        ulltoa(buf[i], szBuffer, 16);
        SetWindowText(hwndStatic3, szBuffer);

        }

-------編集------ 10 進数の入力に基づいて 16 進数を表示できるようにしたい。したがって、c で開発された私の GUI では、テキスト ボックスに 10 進数を書き込むことができ、10 進数の 16 進数値を別のテキスト ボックスに表示したいと考えています。

- - - - - - -編集 - - - - - - - - -

コードを少し修正したところ、16 進数の最後のバイトだけが表示されるようになりました。

例えば。10 進数の入力が 2000 の場合.... 16 進数の出力には d0 のみが表示されます。正しい 16 進出力は 7d0 になるはずです。

4

1 に答える 1

0

この関数は、整数値を 0x0 形式の 16 進文字列に変換します。最初の int は数値で、2 番目の int は実際には 10 ~ 15 文字を決定するために char (通常は 'a' または 'A') を取ります。

char *dtox(int d, int c){
static char buf[80];
if (0==d)return "0x0";
int p=0;
c-=10;
if (0>d) { buf[p++]='-'; d=-d;}
buf[p++]='0';buf[p++]='x';
unsigned int i=1<<28;
while (i>d) i/=16;
while (0<i){
   ((d/i)>9) ? (buf[p++]=(c+(d/i))) : (buf[p++]=('0'+(d/i)));
   if (i<=d) d=d%i;
   i/=16;
}
buf[p]=0;
return buf;
}

itoa は非標準関数であるため、これを投稿するだけです。実際の問題は、おそらく、関数が期待している buf (char 配列、別名文字列) の代わりに buf[256] (char 値) を渡すことです。

于 2013-02-17T17:55:58.657 に答える