Stringクラスをキャストするには?

解決


よしなり  2005-04-21 22:31:55  No: 57118

String* str_String = "";//変数宣言&初期化
unsigned char byt_Number = 0;//変数宣言&初期化

str_String = Console::ReadLine(); //コンソールから入力

で、byt_Numberにstr_Stringを型変換して代入したいのです。
宜しくお願いします。


よっしぃ  2005-04-21 23:30:49  No: 57119

普通にmemcpy or strcpy では?


よしなり  2005-04-22 00:14:10  No: 57120

すんません、VB.NETは使えるんですが、C++.NETは素人同然なんです。
も少し具体的にコードでお願いします(-人-)


よしなり  2005-04-22 00:17:44  No: 57121

strcpy(byt_Number,str_String);

とやってみましたがダメです。

c:\Documents and Settings\misawa\デスクトップ\ConsoleApplication1\ConsoleApplication1.cpp(17): error C2664: 'strcpy' : 1 番目の引数を 'unsigned char' から 'char *' に変換できません。

と言われてしまいます。


みい  2005-04-22 01:26:49  No: 57122

1文字のエリアに文字列(複数文字)入れようとしていますよ。
byt_Numberは配列化しましょう。


よっしぃ  2005-04-22 01:49:55  No: 57123

「String」のクラス?が分らなかったのでCStringにて下記にコードを示します。
勝手な解釈ですが、入力した文字の数値を数値型(unsigned char)に
設定したいって事でよいのであれば下記で行えます。
「atoi」についてはMSDNで調べてください。

CString str_String = "1";//変数宣言&初期化
unsigned char byt_Number = 0;//変数宣言&初期化
byt_Number = atoi(str_String);


よっしぃ  2005-04-22 01:58:11  No: 57124

追記:
atoiはキャストした方がスマートかもしれないですね。
byt_Number = (unsigned char)atoi(str_String);
             ^^^^^^^^^^^^^^^


PATIO  2005-04-22 02:10:19  No: 57125

> すんません、VB.NETは使えるんですが、C++.NETは素人同然なんです。
と言うことなんですが、C言語かC++言語の知識はありますか?
もしこれすらないのではいくらなんでもどうにもならないと思いますけれど。
無いのであれば、言語レベルの勉強からされた方が良い様な気がします。
中途半端に部分的に教えてもらってやっても後でメンテできなくなりそうですし。


YuO  2005-04-22 02:28:03  No: 57126

Managed C++の話ですか?

であれば,Convert::ToByteが使えるのでは?
#というか,これで済むのであればVB.Netでも使える話。


Blue  2005-04-22 02:33:02  No: 57127

というか
Managed C++ は

>String* str_String = "";
のようにかけるのでしょうか?(当然ヤヴァイと思うけど)

やはり PATIOさんの言うとおり
C言語の基礎からやったほうがいいのでは。
(それがイヤならばC#にするとか。)


よっしぃ  2005-04-22 02:38:29  No: 57128

>というか
>Managed C++ は
C++.NETは素人同然なんです。って書いてありますけど・・・


Blue  2005-04-22 02:43:00  No: 57129

>C++.NETは素人同然なんです。って書いてありますけど・・・
だからでこそ、基本的な知識がなくて扱えるものではないということを
認識させるべきではないのでしょうか?

# StringクラスはManaged C++のオブジェクトです。
# 当然私もさっぱりわかりません。
# だからといって、C++の知識もない人にMFCのCStringを教えるべきではないと思いました。


よっしぃ  2005-04-22 02:48:17  No: 57130

>StringクラスはManaged C++のオブジェクトです。
Stringクラスのなぞが解決!

># だからといって、C++の知識もない人にMFCのCStringを教えるべきではないと思いました。
って言っても「str_String = Console::ReadLine(); //コンソールから入力」で戻り値の型が違うから少しは考えないと出来ないのではないかと思っています。
しかも戻り値は*ですし・・・
String*の初期かもどうかと思うのは私だけ?


Blue  2005-04-22 02:56:02  No: 57131

>String*の初期かもどうかと思うのは私だけ?
初期化するなら
String* str_String = __gc new String( "" );
とかなんかなんでしょうかね。(検索した結果w)

ポインタを明示的に初期化するのはありですけど。
String* str_String = NULL;


よっしぃ  2005-04-22 02:57:44  No: 57132

↑同感


よしなり  2005-04-22 02:59:20  No: 57133

勉強不足でご迷惑お掛けして、大変申し訳御座いませんでした。
説明不足も多々ありました。
環境はOSがXPで、開発言語がVISUAL  C++です。
そして、具体的にやろうとしている事は、コンソールアプリケーション
を作りたかったのです。
コマンドラインから文字列を引数として受け取って、
それを関数内で数値型に変換したかったのです。


よっしぃ  2005-04-22 03:00:08  No: 57134

まぁ色々話が脱線しましたが結果どうなりましたかー
返事くださいねー>よしなりさん


よしなり  2005-04-22 03:32:28  No: 57135

#include "stdafx.h"

#using <mscorlib.dll>

using namespace System;

int _tmain()
{
    // TODO: 下のサンプル コードを独自のコードに置き換えてください。
  String* str_String =  NULL;//変数宣言&初期化
  unsigned char byt_Number = 0;//変数宣言&初期化
  
  str_String = Console::ReadLine(); //コンソールから入力
  byt_Number = (unsigned char)atoi(str_String);

としてみましたが、

c:\Documents and Settings\misawa\デスクトップ\ConsoleApplication1\ConsoleApplication1.cpp(17): error C2664: 'atoi' : 1 番目の引数を 'System::String __gc *' から 'const char *' に変換できません。

と言うエラー表示がでます。


シャノン  2005-04-22 04:58:39  No: 57136

Int32::Parse ではいかが?

#質問時に環境を書くのは当然としても
#普通の C++ か Managed C++ かも書くようにしたほうがいいですね
#来年になると C++/CLI という選択肢も加わりますが。


よしなり  2005-04-22 05:03:34  No: 57137

すんません開発環境も詳しい事は解りません(;´Д`)
確実なのは C++.NET と言う事と、「それでコンソールアプリを作りたい」
そして、「入力された文字列を数値型に変換したい」と言う事なんです。


よしなり  2005-04-22 05:12:11  No: 57138

// これは、アプリケーション ウィザードを使って生成された、VC++ アプリケーション プロジェクトの 
// メイン プロジェクト ファイルです。

#include "stdafx.h"

#using <mscorlib.dll>

using namespace System;

int _tmain()
{
    // TODO: 下のサンプル コードを独自のコードに置き換えてください。
  String* str_String =  NULL;//変数宣言&初期化
  unsigned char byt_Number = 0;//変数宣言&初期化
    
  str_String = Console::ReadLine(); //コンソールから入力
  //byt_Number = (unsigned char)atoi(str_String);
  byt_Number = Int32::Parse(str_String);

ダメです...エラーが出てしまいます。もう諦めた方が良いのでしょうか?


Blue  2005-04-22 05:18:25  No: 57139

>byt_Number = Int32::Parse(str_String);
byt_Number = Int32::Parse(*str_String);
としてみてはどうですか?(Parseの引き数の型がわからんけど)

というかポインタがわからないまま学習を進めるのは危険です。
Maneged C++ ではなく C言語から学習してください。


Blue  2005-04-22 08:53:36  No: 57140

YuOさんのあげられた Convert::ToByte をしらべたところ
public: static unsigned char ToByte(
   String* value
);
がMSDNにありました。しかもサンプルソース付で。
# 普通ヒントくれたら調べるだろうけど。。。

さらにシャノンさんのInt32::ParseをもとにByte::Parseというのもあったし。。。(サンプルないけど) 
public: static unsigned char Parse(
   String* s
);

>>String* str_String = "";
>のようにかけるのでしょうか?(当然ヤヴァイと思うけど)
String* str_String = S"";
でOKでしたね。(そういえばそうでした。)

#include "stdafx.h"

#using <mscorlib.dll>

using namespace System;

int _tmain()
{
    // TODO: 下のサンプル コードを独自のコードに置き換えてください。
    String* stringVal = Console::ReadLine();
    unsigned char byteVal = Convert::ToByte( stringVal );      
    Console::WriteLine( S" {0} as a Byte is: {1}", stringVal, __box( byteVal ) );
    
    return 0;
}

実行環境ないので試してません。


よしなり  2005-04-22 09:13:09  No: 57141

やっぱり動きません。エラーメッセージは以下の通りです。

ConsoleApplication1 fatal error LNK1201: プログラム データベース 'C:\Documents and Settings\misawa\デスクトップ\ConsoleApplication1\Debug\ConsoleApplication1.pdb' に書き込めません。ディスク容量不足、パスが無効、また十分な特権がない可能性があります。


よしなり  2005-04-22 09:23:54  No: 57142

ソリューション最初から作り直したら動きました!
皆さん有り難う御座いました!


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加