トップ回答者
string^型に入れた数字文字列を2文字ごとにHEX数値として使用することはできますか?

質問
-
テキストボックスに入っている42文字の文字をHEX数値として、2文字ごとに数値データとして使用したいのですが、
100000004466FFFFFFFFFFFFFFFFFFFFFFFFFFFF
例えば、char b[21];という配列を用意して、テキストボックスに入った文字列をHEX数値として代入していく方法はありませんでしょうか?
private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) { String^ a; char b[21]; a = textBox1->Text; for(i=0;i<21;i++) b[i] = S2Hex(a[i]); }
思いつきなんですが、こういうプログラムが書けないのかなと考えております。どうぞご教授の程よろしくお願い致します。
回答
-
> 基本、C++どころか、C言語も怪しいのですが、
VC++でないといけないのでしょうか?
どういう風に使われるのか分かりませんが、ここに書かれているいる程度でしたら、Excelの関数でもできませんか?
テキストデータをExcelに貼り付けて、文字列関数と Hex2Dec()とかで、16進10進変換すれば、
それなりに簡単にできませんか?
大量のデータとか、桁数が多い数字をそのままは難しいと思いますが、(C/C++でも同様かと)
内容次第ですが、検討してはどうでしょう。
もっとも C/C++の練習なら、それもそれで良いとは思いますが、、、。
-
基本、C++どころか、C言語も怪しいのですが、いろいろコード作成のことなど質問させて頂き生意気にも失礼致します。
今やりたいこととしては、ATmega88というマイコンのEEPROMデータをPCに保存する際にテキストデータとしてインテルHEX形式で書かれているため、それぞれの行の数値を加算して、それを2の補数計算をした結果を表示しないと行けないということをやりたく、ちょうど開発環境がExpressでVC++でできるというのを聴き勉強させてもらっています。まず、GUIが必要ですか?
GUI(ウインドウでの表示)が必要無いのであれば、コンソールアプリでも十分だと思います。
コンソールアプリであれば、ウインドウ周りの制御を勉強しなくても動作させる事が出来るので
ウインドウを使った表示が目的で無いのであれば、C++でコンソールアプリを使った方が良いのでは
無いかと思います。Express EditionではGUIを使ったソフトはC++/CLIを使ってプログラムをする
前提で開発環境が構築されているので厳密に言えば、C言語でもC++言語でもGUIアプリは
組めるのですが、そのためには色々知識を必要としますからそれなりに勉強が必要になります。
勉強をするにしても段階を踏まないと理解が難しくなります。
効率よく勉強をするには段階を踏む事が必要だと思いますよ。
解決した時は、参考になったレスポンスの所にある[回答としてマーク]ボタンをクリックしてスレッドを締めましょう。
すべての返信
-
String^ aに格納された文字列をHEX数値としてchar b[21]に変換したい、という質問ですか? 問題箇所をきちんと切り分け簡単化するとテキストボックスが無関係になるのは理解できますか?
次にString^型というのはいったん忘れて、
- C言語(Cランタイムライブラリ)でなら書けますか?
- C++言語(STL等)でなら書けますか?
- C#言語(.NET Frameworkクラスライブラリ)でなら書けますか?
何か少しでもできれば、そこから説明していくこともできますが…いきなり、C++/CLIを使用するのは敷居が高いと思います。
それともtechhouse_styleさんに代わってプログラムを書いてくださいとか?
-
思いつきなんですが、こういうプログラムが書けないのかなと考えております。
できるかどうかで言えば、できます。
が、そのコードをそのまま書いてもコンパイルが通らないのは明白なので、自分で代わりのコードを組み立てる必要があります。すでにアドバイスがあるように、どこからならあなたは書けるのでしょうか?
char source[] = "100000004466FFFFFFFFFFFFFFFFFFFFFFFFFFFF"; からなら、自分のやりたいことはできるのですか?C++/CLI は C++ がある程度使えることが前提の言語、開発環境といえます。
C++ なり、C 言語なりでのやり方が思い浮かばないのであれば、いきなりコードを書こうとするのではなく、基礎的なところから学び直してください。
質問スレッドで解決した場合は、解決の参考になった投稿に対して「回答としてマーク」のボタンを押すことで、同じ問題に遭遇した別のユーザが役立つ投稿を見つけやすくなります。 -
回答頂きありがとうございます。
基本、C++どころか、C言語も怪しいのですが、いろいろコード作成のことなど質問させて頂き生意気にも失礼致します。
今やりたいこととしては、ATmega88というマイコンのEEPROMデータをPCに保存する際にテキストデータとしてインテルHEX形式で書かれているため、それぞれの行の数値を加算して、それを2の補数計算をした結果を表示しないと行けないということをやりたく、ちょうど開発環境がExpressでVC++でできるというのを聴き勉強させてもらっています。
ある程度自分でやりたいのですが、できればサポートして頂ければ幸いです。
-
回答頂きありがとうございます。
基本、C++どころか、C言語も怪しいのですが、いろいろコード作成のことなど質問させて頂き生意気にも失礼致します。
今やりたいこととしては、ATmega88というマイコンのEEPROMデータをPCに保存する際にテキストデータとしてインテルHEX形式で書かれているため、それぞれの行の数値を加算して、それを2の補数計算をした結果を表示しないと行けないということをやりたく、ちょうど開発環境がExpressでVC++でできるというのを聴き勉強させてもらっています。
ある程度自分でやりたいのですが、できればサポートして頂ければ幸いです。
-
TextBoxに入力された文字列と、それから導き出される期待した処理結果の例を具体的に上げることは可能でしょうか?
また、言語以前にどういう処理をしたいのか、言葉で構いませんので具体的にアルゴリズムの説明をしてもらえると、回答しやすいと思います。
その上で、Platform(C/C++/C++/CLI)に何を選ぶか決めましょう。単純に文字列を文字コードに変換すると言っても、文字コード種は様々です。
textBox1->Textで取得できる文字列はUTF-16 LEになります。例えば、以下のようなCodeでTextBoxに"abcd"と入力した場合、
String ^s = textBox1->Text; StringBuilder ^sb = gcnew StringBuilder(); int count = s->Length / 2; for(int i = 0 ; i < count ; i ++) { UInt16 c1 = (UInt16)s[i * 2];
UInt16 c2 = (UInt16)s[i * 2 + 1];
sb->AppendFormat("{0:X}{1:X}",c1,c2); } textBox2->Text = sb->ToString();
結果は"61626364"となります。- 編集済み kozz 2011年8月11日 12:15 記述ミス
-
-
> 基本、C++どころか、C言語も怪しいのですが、
VC++でないといけないのでしょうか?
どういう風に使われるのか分かりませんが、ここに書かれているいる程度でしたら、Excelの関数でもできませんか?
テキストデータをExcelに貼り付けて、文字列関数と Hex2Dec()とかで、16進10進変換すれば、
それなりに簡単にできませんか?
大量のデータとか、桁数が多い数字をそのままは難しいと思いますが、(C/C++でも同様かと)
内容次第ですが、検討してはどうでしょう。
もっとも C/C++の練習なら、それもそれで良いとは思いますが、、、。
-
基本、C++どころか、C言語も怪しいのですが、いろいろコード作成のことなど質問させて頂き生意気にも失礼致します。
今やりたいこととしては、ATmega88というマイコンのEEPROMデータをPCに保存する際にテキストデータとしてインテルHEX形式で書かれているため、それぞれの行の数値を加算して、それを2の補数計算をした結果を表示しないと行けないということをやりたく、ちょうど開発環境がExpressでVC++でできるというのを聴き勉強させてもらっています。まず、GUIが必要ですか?
GUI(ウインドウでの表示)が必要無いのであれば、コンソールアプリでも十分だと思います。
コンソールアプリであれば、ウインドウ周りの制御を勉強しなくても動作させる事が出来るので
ウインドウを使った表示が目的で無いのであれば、C++でコンソールアプリを使った方が良いのでは
無いかと思います。Express EditionではGUIを使ったソフトはC++/CLIを使ってプログラムをする
前提で開発環境が構築されているので厳密に言えば、C言語でもC++言語でもGUIアプリは
組めるのですが、そのためには色々知識を必要としますからそれなりに勉強が必要になります。
勉強をするにしても段階を踏まないと理解が難しくなります。
効率よく勉強をするには段階を踏む事が必要だと思いますよ。
解決した時は、参考になったレスポンスの所にある[回答としてマーク]ボタンをクリックしてスレッドを締めましょう。