0

マイクロチップのメモリを読み書きするアプリケーションを構築しています。

4つの固定バイトと2つの可変バイトを持つunsigned char配列を渡す必要があるため、メモリバンク0004を読み取りたいと仮定して渡します

unsigned char sRequest[32]={0};
sRequest[0] = 0x02; //FIXED
sRequest[1] = 0x1F; //FIXED
sRequest[2] = 0x0A; //FIXED
sRequest[3] = 0x20; //FIXED
sRequest[4] = 0x00; //VARIABLE
sRequest[5] = 0x04; //VARIABLE

ユーザーがその変数メモリ バンクを入力できるように 2 つの CEdit ボックスを配置したいので、最初の CEdit に 0x00 を書き込み、2 番目の CEdit に 0x04 を書き込みます。

私の質問は、これらの入力のそれぞれを unsigned char に変換して、sRequest 変数に設定するにはどうすればよいですか?

事前に感謝します(デイブに感謝します。バイトをビットに誤入力しました。現在修正されています)

4

1 に答える 1

0

実際、私は自由形式のテキスト入力ではそれをまったく行いません - 検証を行うのは面倒です (本質的に怠惰です)。ユーザーができるだけ早くあなたに与えることができるものを制限する機会がある場合は、それを取るべきです:-)

選択する数量が面倒にならないように、各ニブルの値のドロップダウン ボックスを用意します。次のようなものです (そして、私のグラフィカルなスキルについてはお詫びします):

               +---+-+  +---+-+  +---+-+  +---+-+
Enter value 0x | 0 |V|  | 0 |V|  | 0 |V|  | 4 |V|
               +---+-+  +---+-+  +---+-+  +---+-+
               |>0<|
               | 1 |
               | 1 |
               | 2 |
               | 3 |
               : : :
               | E |
               | F |
               +---+

リストボックスの値については、項目データを 0 から 15 までの範囲に設定します (項目0から までF)。

そうすれば、次のようなもので単一バイト値を取得できます。

byte04 = listboxA.GetItemData(listboxA.GetCurSel()) * 16 +
         listboxB.GetItemData(listboxB.GetCurSel());

byte05 = listboxC.GetItemData(listboxC.GetCurSel()) * 16 +
         listboxD.GetItemData(listboxD.GetCurSel());

より制限の少ない入力メソッドを使用する必要がある場合、C++ は以下を提供します。

int stoi (const string& str, size_t *idx = 0, int base = 10);

(およびstol/stoul符号付きおよび符号なし long の場合) C++ 文字列を整数型に変換できるようにします。

あなたの目的のために。おそらく先頭を検出して削除する必要があります0x(おそらく先頭/末尾のスペースなどとともに)。これが、より良いオプションとして制限的なルートを提案する理由です。

于 2011-08-22T03:14:05.020 に答える