String型をchar型配列に変換する方法
- VC++2005ExpressEdition + PlatformSDKを使用しています。
- String型をchar型配列に変換する方法について調査しましたが、エラーが発生しています。
- String型からchar型配列への変換方法を教えていただきたいです。
- ベストアンサー
String型をchar型配列にしたい
VC++2005ExpressEdition + PlatformSDKを使用しています. String型をchar型配列に変換したいと思っています. 自分なりに調べてみたのですが, > String^ str = gcnew String("test"); > char chr[5]; > chr = str->ToCharArray(); などとしても次のようなエラーが出ます. > error C2440: '=' : 'cli::array<Type,dimension> ^' から 'char [5]' に変換できません。 String型からchar型配列への変換はどのようにすればいいのでしょうか.
- magicoflove
- お礼率1% (11/757)
- C・C++・C#
- 回答数3
- ありがとう数0
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
>gethostbyname でアドレスを返したい Dns::GetHostByName スタティックメソッドを使えば良いです。 http://msdn2.microsoft.com/ja-jp/library/system.net.dns.gethostbyname.aspx
その他の回答 (2)
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
ToCharArray は、Char (wchar_t[]) を返しますからダメですよね。 GetBytes を使うと、Byte (unsigned char[]) を返しますから なんとかなるんじゃないでしょうか 一般的に、System::String は、ユニコードですからchar に変換する意味がよくわかりません。 どっちにしても、 char chr[5] に、 chr = とはできないと思います。
- galluda
- ベストアンサー率35% (440/1242)
がると申します。 ちとWinodows系は不得手なので恐縮ではありますが。 UNIX系ですと、c_str()というメソッドを使って、ポインタの取得が出来ます。 ですので、例えば string str = new string("test"); char chr[5]; memset(chr, '\0', sizeof(chr)); memcpy(chr, str.c_str(), str.size()); という方法がつかえます(charのサイズだのなんだのエラーチェック周り思いっきり割愛しまくってますが)。
関連するQ&A
- char型配列をString型にしたい
VC++2005ExpressEdition + PlatformSDKを使用しています. char型配列をString型にしたいと思っています(MessageBoxで表示するため). int型ならば, > String^ out = String::Format("{0}", i ); > MessageBox::Show(out); などとできます. 下のアドレス(*1)のNo.2の答えにあるように > char ss[256]; > String^ out; > out=ss; とすると > error C2440: '=' : 'char [128]' から 'System::String ^' に変換できません。 なるエラーが出ます(S を大文字にしたりハットを付けたりしています). char型の配列のString型への変換はどのようにすればいいのでしょうか. (*1)http://oshiete1.goo.ne.jp/kotaeru.php3?q=479640
- ベストアンサー
- C・C++・C#
- String型からChar配列への変換は可能?
String型から例えばcharの配列に変換するという事はできるでしょうか String str="OKwave"だとすると char c[]={'O','K','w','a'.'v','e'}; というような感じにしたいのですが、流石に不可能でしょうか。 もし出来ないなら、代替方法とか教えていただけるとありがたいです。 とりあえず、文字を一つ一つに分けたいのです・・・ Javaはまだ初心者で、質問内容も初歩的なものだと思いますが、よろしくおねがいします。
- ベストアンサー
- Java
- C++/CLIにて、System.String^型からChar*への変換。または、fopen_s以外のファイル出力方法
現在、VisualC++2005の「空のCRLプロジェクト」からコツコツプログラムを組んでいます。 ファイルを読み込む→処理→他のファイルに結果を出力という単純なプログラムなのですが、入力、出力ファイル名を共に、コンソール画面から入力するというところで困っています。 コンソールから読み込みについては、バッチの利用も考えてmain関数で、 int main(array<String^>^ (変数名)) とし、String^型でファイル名を読み込みました。 しかし、実際にファイルを呼び出す際には、 fopen_s(&fp, (char*型ファイル名) ,"a"); を利用するため、char*型に変換しなければなりません。 ToCharArrayを試しましたが、 'cli::array<Type,dimension> ^' から 'char *' に変換できません。 とエラーが出ますし(過去の質問にもあります)、キャストも同様です。 ファイル名の読み込みをchar*にもしてみましたが、String^にするようにとのエラーが出ました。 何か良い解決方法はないでしょうか。 (1)String^型からChar*へ変換する (2)String^型でファイルを開く(fopen_s以外の)関数を探す などの解決法があると思いますが、どちらでもかまいません。 ご存知の方、よろしくお願いします。 情報が不足していましたら、どのような情報が必要かもお教えください。 よろしくお願いします。
- 締切済み
- C・C++・C#
- [CLR]webBrowser->Navigateについて
あるサイトのログインを実装するために次のコードを書きました。 public: void postdata(){ Uri^ siteUri = gcnew Uri( "http://www.hogehoge.net/index.php" ); array <String^,1>^strData = gcnew array <String^,1 > ( 128 ); String^strHeader; strData[0] = "id=hoge&pass=hogehoge"; strHeader = "Content-Type: application/x-www-form-urlencoded"; this->webBrowser1->Navigate(siteUri,"",strData,strHeader); } しかしコンパイルすると error C2664: 'void System::Windows::Forms::WebBrowser::Navigate(System::Uri ^,System::String ^,cli::array<Type,dimension> ^,System::String ^)' : 3 番目の引数を 'cli::array<Type,dimension> ^' から 'cli::array<Type,dimension> ^' に変換できません。 となります。一見通りそうなのですが・・・。 配列あたりが怪しそうなのですがどうも納得出来ません。 ご教授願えるとありがたいです。
- 締切済み
- C・C++・C#
- VC++2010で配列に文字列を使用する方法
array<String^,3>^ myMat = gcnew array<String^,3>(15,97,3338); このようにするとビルド出来るのですが、 array<String^,3>^ myMat = gcnew array<String^,3>("あ","か","さ"); とすると 1>d:\documents and settings\****\my documents\visual studio 2010\projects\****\Form1.h(220): error C2440: '初期化中' : 'const char [3]' から 'int' に変換できません。 1> この変換が可能なコンテキストはありません。 とエラーが出てしまいます どのようにすれば良いのでしょうか?
- 締切済み
- C・C++・C#
- System::String->char*変換でき
C++/CLIでSystem::String^文字列をchar*に変換する関数を書いたのですが、256文字以上の文字列を投げて、戻値を確認してみると、255文字分しか中身が詰まっていません。元の文字列はアスキーのみです。 #include <msclr/marshal.h> using namespace msclr::interop; static char* toPtChar(const String^ Text) { String^ temp = (String^)Text; msclr::interop::marshal_context^ context = gcnew msclr::interop::marshal_context(); char* res = ((char*)(context->marshal_as<const char*>(temp))); return res; } この関数をどのように変更すれば、256文字以上変換できるでしょうか?
- ベストアンサー
- C・C++・C#
- unsigned char SJis[2]からstd::stringに変換
開発環境は VC++ 2008 Express Edition あるDLLの関数で戻り値としてShiftJISの1文字が格納された unsigned char SJis[2] が返され,これを呼び出し側のプログラムで使っている文字列 std::string str に順に追加していこうと思っています. そこで, unsigned char tmpSJis[3]; tmpSJis[0] = SJis[0]; tmpSJis[1] = SJis[1]; tmpSJis[2] = '\0'; str += std::string(tmpCode); というコードを書いてループさせたのですが, error C2440: '<function-style-cast>' : 'unsigned char *' から 'std::string' に変換できません。 というエラーが出てしまいうまく変換できません. これを解決する方法はありませんか?
- ベストアンサー
- C・C++・C#
- 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"; } }; }
- ベストアンサー
- C・C++・C#
- [VB.net] StringからByte配列への変換
皆さんこんばんは。 最近VB.NET2000でVisual Basicをはじめたのですが、どうにもString型の値をByte配列へ変換するやり方が分かりません。 VB6.0だとByte配列にStringを代入するだけでいいそうなのですが、.NETで代入しようとすると『型"String"の値を"Byteの1次元配列"に変換できません』というビルドエラーが表れてしまいます。 CByte( Mid(str,i,1) ) CLng( Mid(str,i,1) ) 他にも上記コードのように一つずつ変換しようと試みたのですが、String中のある文字がワイドバイトらしく、System.InvalidCastExceptionが表れてしまいます。 ("『"を上下反転したような文字) ワイドバイトのStringを1バイトずつ区切ってByte配列やLong配列へ格納する手法というものはありませんでしょうか。 よろしくお願いします。
- ベストアンサー
- Visual Basic
- [C++/CLI]マネージコードで配列を作成してネイティブコードの配列にコピーしたい
Visual C++ 2005のC++/CLIでプログラム作成しています。 C言語で書かれたプログラムを組み込みたい為に、 マネージコードでテキストファイル読み込みをして、2次元配列に格納し、 int型に変換してネイティブコードの配列にコピーしたいのですが、上手く書けません。。 テキスト内容は数字のみで2次元に並んでおり、1文字ずつ配列に入れたいです。 エラー出ているのですが、下記にコードを載せます。 #include<string> #include<vcclr.h> using namespace System; using namespace System::IO; int main(void){ //ファイルオープン StreamReader^ sr = gcnew StreamReader("hoge.txt"); int x, y; //ファイルの内容読込み for(y=0;;y++){ String^ line = sr->ReadLine(); //データ末尾まで読み込んだらループ終了 if(line == nullptr) break; array<array<String^>^>^ table = gcnew array<array<String^>^>(line->Length); int X=line->Length; int Y=table->Length; //読み込んだ内容を表示 Console::WriteLine("<System::String表示>" + table); //System::Stringのline内容(文字列)をコピーする変数 char tmp[128]; sprintf(tmp,"%s",line); printf_s("<char配列> tmp=%s\n",tmp); //char*変数の内容表示 array<array<int>^>^ data= gcnew array<array<int>^>(Y,X); //int型に変換 for(x=0;x<X;x++){data[y][x]=atoi(table[y][x]);} } //ファイルのクローズ sr->Close(); return 0; } 汚く読みづらいコードで大変申し訳ありません。。 元はdefineで成分数(X,Y)を宣言していました。 しかし、読み込むファイル内容によって変えたく、arrayでLengthを使いました。 またこれ以外でいい方法がございましたら、どうか教えてください。 どなたか、ご教授よろしくお願いします。
- ベストアンサー
- C・C++・C#
補足
コメントありがとうございます. テキストボックスにはホスト名が入っていると仮定していて,そのホスト名に対して gethostbyname でアドレスを返したいと思っています(それを利用してソケットを使いたい,というのが目的です). > struct hostent FAR * gethostbyname (const char FAR * name); なので,Stringをcharに変換できれば,と思っています.