- ベストアンサー
文字列をint型にキャスト
文字列をunsigned int型キャストし,それをある演算をして 正の整数に変換したいのですがどうすればいいですか? int ca(char *s) { unsigned int h; int key; h = (unsigned int)s; //文字列を演算し 0~254 の整数にする// key = h % 254; return key; } int main() { char moji[32]; moji = "moji"; unsigned int c; c = ca(moji); }
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
#1の方が言われているようになにがしたいのかが良くわかりません。 結果どうなることを期待しているのか書いてみてはどうでしょう? 以下、勝手に推測 char型をint型にキャストする場合は、エンディアンを よく考えてください。 char型の場合は、メモリに以下のように読まれます。 ↓char変数のアドレス。 moji つまり、先頭アドレスの場所を見ると0x6Dになりますよね? int型の場合には ↓int変数のアドレス。 ↓読み込み開始位置 moji int型の場合は、4バイト(OS依存)変数ですので、後ろから見ます。 つまり0x696A6F6Dと見えるはずです。 ですので、int型変数に文字列を入れてchar型の時と同様に 見えるようにするためにはエンディアン変換をしてください。 (順番を入れ替えてからint型に代入してください。) 254の余りを戻している部分に関しては、期待している動作が わかりません。
その他の回答 (2)
- WizTaka
- ベストアンサー率53% (7/13)
文字列を int に変換したいなら、atoi という関数を使うと簡単にできます。 //----------------------------------------------------------- #include <iostream> using namespace std; int main() { char test[] = "123"; int value = atoi(test); cout << value << endl; return 0; } //----------------------------------------------------------- これ以外にも、istringstream を使ってもできます。 //----------------------------------------------------------- #include <iostream> #include <sstream> using namespace std; int main() { string strTest = "123"; istringstream iss(strTest); int value; iss >> value; cout << value << endl; return 0; } //----------------------------------------------------------- ここまでできれば、正の整数に変換することもできるでしょう。
- koko_u_
- ベストアンサー率18% (459/2509)
なにをしたいのかまったく不明です。 >//文字列を演算し 0~254 の整数にする// >key = h % 254; 0 ~ 254 の整数が欲しければ 255 で割って下さい。 >char moji[32]; >moji = "moji"; 恐らく、moji 配列に 'm', 'o', 'j', 'i' を格納したいのでしょうけど、 C 言語でこのような書き方はできません。「文字列」とは何かから学習して下さい。