• ベストアンサー

ASCIIコードを文字に変換したい

環境はVisualStdio.Net 2008のC++ Windowsフォームアプリケーションです。 C++の経験はまったくありません。 unsigned char型の配列 box[12]の中に既にアスキーコードでデータが格納されています。(例:box[0] = 48'0') これをtextbox->textにアスキーコードではなく文字で格納し、実行時に画面で確認できるようにしたいのですが、 (char)でキャストしてもfomat()で%xや%cにしても「0」でなく「48」で出力されてしまいます。 調べたらVBにはchrという関数があるみたいなんですが、これと同じ機能を持つ関数はVC++にはないのでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • jx-word
  • ベストアンサー率40% (38/94)
回答No.3

むむ、1の方法でも実行時エラーならともかく、コンパイルエラーはでないような気が。 ちゃんとキャストをしなかったからですかね。  textbox->Text = System::String( ( signed char *)box); とか、  textbox->Text = System::String( ( signed char *)box, 0, 12); で通りそうです。上は実行時に異常になりますが。 基本的にはこの考え方でいいはずなので、あとは適当にデバッグしてください。

doseisan77
質問者

お礼

ありがとうございます。 コンパイルエラーはchar*でなかったからだと思います。 あと1文字ずつだったのも問題だったかもしれないです。 あとは自力でがんばります。 どうもありがとうございました。

その他の回答 (2)

  • jx-word
  • ベストアンサー率40% (38/94)
回答No.2

box[12]の中身が\0で止まっているC文字列なら、  textbox->Text=String( box); box[12]の中身が12文字のASCIIコードなら、  textbox->Text=String( box, 0, 12); ASCIIコードが実はシフトJISコードなら、  textbox->Text=String( box, 0, 12, System::Text::Encoding::GetEncoding( "shift_jis")); おっと、文字列じゃなくて文字でした。 例えば、  textbox->Text=String( box, 0, 1); こんな感じでしょうか。

doseisan77
質問者

お礼

回答ありがとうございます。 >box[12]の中身が12文字のASCIIコードなら、 >textbox->Text=String( box, 0, 12); これです。1番目の方法もやってみたのですがコンパイルエラーでできなかったので.CStringでtextboxに格納していました。\0がないとだめなんですね。 2番目の方法でやってみます!

  • koko_u_
  • ベストアンサー率18% (459/2509)
回答No.1

もう少し実際のコードを抜粋でいいから書いた方がよいでしょう。 ・box[12] に値を格納している箇所のコード ・textbox->text に値をコピー(?)している箇所のコード ・キャストしているならその箇所のコード などなど。 unsigned char 型の変数に値 48 が格納されているなら、printf("%c",..) で「0」と印字されるはずです。

doseisan77
質問者

お礼

回答ありがとうございます。 実際のコードは会社のセキュリティ上データは持ち出し禁止なため今手元にありません。一部だけノートにメモって来るべきでした。またインターネットも制限があるため会社内ではここ閲覧、書き込みできないため自宅で質問しています。 やりたいことはreadボタンクリックでICカードからIDを読み込み、textboxに出力する処理です。 >・box[12] に値を格納している箇所のコード ICカードからのデータ取得部分が丸々DLL内にあり、取得している箇所を記述できません。 IDread(hd, cmd, result); (ハンドル、コマンド設定、結果) でresult構造体内のunsigned char 配列に値が格納されます。 それをmemorycopyで配列boxにコピーして利用しています。 >・textbox->text に値をコピー(?)している箇所のコード textbox->text = textbox->text + box[i].CString(); これをfor文でまわして12文字格納しています。 >・キャストしているならその箇所のコード textbox->text = (char)boxi[i]; >unsigned char 型の変数に値 48 が格納されているなら、printf("%c",..) で「0」と印字されるはずです。 ネットで調べるとほとんどがprintfかcoutでの出力したサンプルプログラムだったのでそれは知っているんですが、textboxに出力する場合もprintfで可能なのでしょうか?

関連するQ&A