みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

unsighed charの数値をstringに

for(k=0;k < 6;k++)
{
Wireless_ID_str02[i]->Wireless_ID_str += Wireless_unit[i].wireless_id[k].ToString("X2");
}

このようなブログラムを使ってWireless_unit[i].wireless_id[k]

unsighed charの次の数値

Wireless_unit[i].wireless_id[0] = 1;
Wireless_unit[i].wireless_id[1] = 1;
Wireless_unit[i].wireless_id[2] = 1;
Wireless_unit[i].wireless_id[3] = 1;
Wireless_unit[i].wireless_id[4] = 1;
Wireless_unit[i].wireless_id[5] = 1;


これを



stringの
Wireless_ID_str02[i]->Wireless_ID_str

この中に”111111”


というように代入していきたいのですが、

実際に入ってきたのは

Wireless_ID_str02[i]->Wireless_ID_str = ”test313131313131”


となりました。




Wireless_ID_str02[i]->Wireless_ID_str = ”111111”


という風に代入する方法はありませんでしょうか。




”Wireless_unit”というのは

Wireless_unit Wireless_unit;

というので宣言しています。

struct Wireless_unit {
unsigned char wireless_id[6];
unsigned char use;
unsigned char tampa_sig_m1;
unsigned char tampa_sig_m2;
unsigned char tampa_sig_m34_set;
unsigned char tampa_sig_m34_reset;
unsigned char battlow_sig_m1;
unsigned char battlow_sig_m2;
unsigned char battlow_sig_m34_set;
unsigned char battlow_sig_m34_reset;

unsigned char sch_sig_m1;
unsigned char sch_sig_m2;
unsigned char sch_sig_m34_set;
unsigned char sch_sig_m34_reset;

unsigned char ch1_use;
unsigned char ch1_emg_sig_m1;
unsigned char ch1_emg_sig_m2;
unsigned char ch1_emg_sig_m34_set;
unsigned char ch1_emg_sig_m34_reset;

unsigned char ch2_use;
unsigned char ch2_emg_sig_m1;
unsigned char ch2_emg_sig_m2;
unsigned char ch2_emg_sig_m34_set;
unsigned char ch2_emg_sig_m34_reset;

};



また、

”Wireless_ID_str02”は

array<Wireless_unit_str^>^ Wireless_ID_str02 = gcnew array<Wireless_unit_str^>(32);


このように宣言しています。




namespace HomeBank {
using namespace System;
using namespace System::Collections::Generic;
/**
* 明細データクラス
*/
ref class Wireless_unit_str
{
private:

public:

String^Wireless_ID_str;
//array<String^>^ Wireless_ID_str = gcnew array<String^>(32);

public:
Wireless_unit_str()
{
Wireless_ID_str = "test";


}

};

}

投稿日時 - 2012-04-15 13:38:18

QNo.7422335

すぐに回答ほしいです

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

>この中に入っているのは数値です。バイナリファイルから代入した値をここに入れています。なので、hexで出すと”31”と出てくるのですね。

hexで31ならば'1'ですから「数字の1」ではありませんか?
まぁ数値の49でもあるワケですが。
# ASCIIコードならば…ですが。

C#じゃなくて…CLIでしたっけ?
# epistemeさんのコードは、VS2005でCLRで動きましたが…。
# この辺り、全然触っていないのでなんとも…。

投稿日時 - 2012-04-15 16:58:10

お礼

回答頂きありがとうございます。助かります。

今思ったのですが、

>hexで31ならば'1'ですから「数字の1」ではありませんか?
>まぁ数値の49でもあるワケですが。
># ASCIIコードならば…ですが。


”31”というhexだから、
String^ id_data_str;

id_data_str = Wireless_unit[i].wireless_id[k];

このように入れたらいけるのかなと思ったのですが、次のようなエラーが出ました。


1trunk\vc_test\setting_check\homebank\Form1.h(588): error C2440: '=' : 'unsigned char' から 'System::String ^' に変換できません。
1> 使用可能なユーザー定義された変換演算子がない、または
1> 演算型のボックス化された形式からターゲット型への標準変換は存在しません
========== ビルド: 0 正常終了、1 失敗、0 更新不要、0 スキップ ==========


やはり ToString()を使わないといけないのでしょうか?

投稿日時 - 2012-04-15 19:59:55

ANo.3

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.2

using namespace System;
using namespace System::Collections::Generic;

int main() {
const int N = 6;
unsigned char id[N] = { 1, 2, 3, 4, 5, 6 };
Text::StringBuilder builder;
for ( int i = 0; i < N; ++i ) {
builder.Append(String::Format("{0}",id[i]));
}
String^ result = builder.ToString();
Console::WriteLine("[{0}]", result);
}

投稿日時 - 2012-04-15 14:43:42

お礼

回答頂きありがとうございます。ちょっとStringBuilderっていうのを試してみたいと思います。

投稿日時 - 2012-04-15 19:45:25

ANo.1

Wr5

C#は触っていませんが…

>Wireless_unit[i].wireless_id[0] = 1;
の1は「数値」の1ですか?
「数字」の1('1')ですか?
「数値」と「数字」の違いはわかりますか?

>Wireless_unit[i].wireless_id[k].ToString("X2");
は、「wireless_id[k]の値を16進数表記2桁で文字列化せよ」ということではありませんか?

上の「数字」の1であればASCIIコードで0x31になりますから、
>Wireless_ID_str02[i]->Wireless_ID_str = ”test313131313131”
で"31"になるのは指定通りです。
# 元々"test"が入っていたのでしょう。

数値の1であれば、
”test010101010101”
となったでしょう。

その上で…
ToString("X2")
が意図したモノですか?
「数字」だったらToString()など使わずにそのまま連結できるんじゃないでしょうか?
「数値」ならToString("D1")かToString("X1")となるのでは?
# ただし入っている数値が0~9の場合に限りますが。

投稿日時 - 2012-04-15 14:08:05

お礼

回答頂きありがとうございます。助かります。


>>Wireless_unit[i].wireless_id[0] = 1;
>の1は「数値」の1ですか?
>「数字」の1('1')ですか?
>「数値」と「数字」の違いはわかりますか?


>>Wireless_unit[i].wireless_id[0] = 1;

この中に入っているのは数値です。バイナリファイルから代入した値をここに入れています。なので、hexで出すと”31”と出てくるのですね。

これをhexの”31”だったら数字の”1”として代入してくれる方法などないでしょうか?

投稿日時 - 2012-04-15 15:17:47