String* str_String = "";//変数宣言&初期化
unsigned char byt_Number = 0;//変数宣言&初期化
str_String = Console::ReadLine(); //コンソールから入力
で、byt_Numberにstr_Stringを型変換して代入したいのです。
宜しくお願いします。
普通にmemcpy or strcpy では?
すんません、VB.NETは使えるんですが、C++.NETは素人同然なんです。
も少し具体的にコードでお願いします(-人-)
strcpy(byt_Number,str_String);
とやってみましたがダメです。
c:\Documents and Settings\misawa\デスクトップ\ConsoleApplication1\ConsoleApplication1.cpp(17): error C2664: 'strcpy' : 1 番目の引数を 'unsigned char' から 'char *' に変換できません。
と言われてしまいます。
1文字のエリアに文字列(複数文字)入れようとしていますよ。
byt_Numberは配列化しましょう。
「String」のクラス?が分らなかったのでCStringにて下記にコードを示します。
勝手な解釈ですが、入力した文字の数値を数値型(unsigned char)に
設定したいって事でよいのであれば下記で行えます。
「atoi」についてはMSDNで調べてください。
CString str_String = "1";//変数宣言&初期化
unsigned char byt_Number = 0;//変数宣言&初期化
byt_Number = atoi(str_String);
追記:
atoiはキャストした方がスマートかもしれないですね。
byt_Number = (unsigned char)atoi(str_String);
^^^^^^^^^^^^^^^
> すんません、VB.NETは使えるんですが、C++.NETは素人同然なんです。
と言うことなんですが、C言語かC++言語の知識はありますか?
もしこれすらないのではいくらなんでもどうにもならないと思いますけれど。
無いのであれば、言語レベルの勉強からされた方が良い様な気がします。
中途半端に部分的に教えてもらってやっても後でメンテできなくなりそうですし。
Managed C++の話ですか?
であれば,Convert::ToByteが使えるのでは?
#というか,これで済むのであればVB.Netでも使える話。
というか
Managed C++ は
>String* str_String = "";
のようにかけるのでしょうか?(当然ヤヴァイと思うけど)
やはり PATIOさんの言うとおり
C言語の基礎からやったほうがいいのでは。
(それがイヤならばC#にするとか。)
>というか
>Managed C++ は
C++.NETは素人同然なんです。って書いてありますけど・・・
>C++.NETは素人同然なんです。って書いてありますけど・・・
だからでこそ、基本的な知識がなくて扱えるものではないということを
認識させるべきではないのでしょうか?
# StringクラスはManaged C++のオブジェクトです。
# 当然私もさっぱりわかりません。
# だからといって、C++の知識もない人にMFCのCStringを教えるべきではないと思いました。
>StringクラスはManaged C++のオブジェクトです。
Stringクラスのなぞが解決!
># だからといって、C++の知識もない人にMFCのCStringを教えるべきではないと思いました。
って言っても「str_String = Console::ReadLine(); //コンソールから入力」で戻り値の型が違うから少しは考えないと出来ないのではないかと思っています。
しかも戻り値は*ですし・・・
String*の初期かもどうかと思うのは私だけ?
>String*の初期かもどうかと思うのは私だけ?
初期化するなら
String* str_String = __gc new String( "" );
とかなんかなんでしょうかね。(検索した結果w)
ポインタを明示的に初期化するのはありですけど。
String* str_String = NULL;
↑同感
勉強不足でご迷惑お掛けして、大変申し訳御座いませんでした。
説明不足も多々ありました。
環境はOSがXPで、開発言語がVISUAL C++です。
そして、具体的にやろうとしている事は、コンソールアプリケーション
を作りたかったのです。
コマンドラインから文字列を引数として受け取って、
それを関数内で数値型に変換したかったのです。
まぁ色々話が脱線しましたが結果どうなりましたかー
返事くださいねー>よしなりさん
#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 *' に変換できません。
と言うエラー表示がでます。
Int32::Parse ではいかが?
#質問時に環境を書くのは当然としても
#普通の C++ か Managed C++ かも書くようにしたほうがいいですね
#来年になると C++/CLI という選択肢も加わりますが。
すんません開発環境も詳しい事は解りません(;´Д`)
確実なのは C++.NET と言う事と、「それでコンソールアプリを作りたい」
そして、「入力された文字列を数値型に変換したい」と言う事なんです。
// これは、アプリケーション ウィザードを使って生成された、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);
ダメです...エラーが出てしまいます。もう諦めた方が良いのでしょうか?
>byt_Number = Int32::Parse(str_String);
byt_Number = Int32::Parse(*str_String);
としてみてはどうですか?(Parseの引き数の型がわからんけど)
というかポインタがわからないまま学習を進めるのは危険です。
Maneged C++ ではなく C言語から学習してください。
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;
}
実行環境ないので試してません。
やっぱり動きません。エラーメッセージは以下の通りです。
ConsoleApplication1 fatal error LNK1201: プログラム データベース 'C:\Documents and Settings\misawa\デスクトップ\ConsoleApplication1\Debug\ConsoleApplication1.pdb' に書き込めません。ディスク容量不足、パスが無効、また十分な特権がない可能性があります。
ソリューション最初から作り直したら動きました!
皆さん有り難う御座いました!
ツイート | ![]() |