🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Q&A

解決済

3回答

1079閲覧

get_s,ASCIIコードを用いたchara型からint型への変換のやり方

hm1216

総合スコア6

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

0グッド

0クリップ

投稿2019/12/10 11:59

編集2019/12/10 12:02

こんにちは。

表題の通りなのですが、
例えば、

char str[10];
int Num;

gets_s(str);
//文字列型からint型への変換
Num = str - 0x30
というやり方を教わりました。

strに入った4桁の数字をint型に変換したい場合、4つずつ変換していく必要がありますよね?
その場合、
Num[0] = str - 0x30
Num[1] = str - 0x31
Num[2] = str - 0x32
Num[3] = str - 0x33
Num[4] = str - 0x34

というやり方で合っていますか?
ご教示お願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tatsu99

2019/12/10 13:17

もし、strに"4732"という文字列が設定されていた場合、Numには4732(10進数)を設定したいということでしょうか。
guest

回答3

0

ベストアンサー

何故0x30を引くのかという肝の部分が分かってないですね。
0x30というのは'0'ですが、例えばインプットが'1'(0x31)の場合、
0x30を引くと1が取得出来ます。

C

1#include <stdio.h> 2 3int main(void) { 4 int num = 0; 5 char moji= '1'; 6 7 num = moji - 0x30; 8 printf("moji[0x%x] 計算結果[%d]", moji, num); 9 10 return 0; 11} 12 13結果 14moji[0x31] 計算結果[1]

ということで入力された文字が'0'(0x30)から'9'(0x39)の場合は
0x30を引くことで0から9の数字を取得することが出来るわけですね。
入力が文字列の場合は、1文字ずつ同じことを繰り返してあげれば
良いわけですね。
但し、あくまで入力された文字が'0'から'9'の場合に限りますので、
それ以外の文字が入力された場合、どうするかの仕様を
別途考える必要があります。

投稿2019/12/11 02:45

kaina

総合スコア418

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hm1216

2019/12/13 06:19

ありがとうございます。
guest

0

char str[10];
int Num;

gets_s(str);
//文字列型からint型への変換
Num = str - 0x30
というやり方を教わりました。

がボロボロです。教わったけど間違ってメモしたと思われます。

それはそれとして、

その場合、
というやり方で合っていますか?

全部strと同じで、4桁をそれぞれ処理できると思いますか?
1桁=1文字ずつ処理していくという考えはあっています。

投稿2019/12/10 13:14

otn

総合スコア85882

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hm1216

2019/12/13 06:20

ありがとうございます。
guest

0

あってません
'0' というのは0x30です。10進数であるならこれで1桁づつ変換していけばいいですが、
16進の場合は'A'~'F'が入ってきますんで、ここらへん変換してやらないといけません

#おまけに'a'~'f'だったらどうしようとか考える必要がありますね

投稿2019/12/10 12:54

編集2019/12/10 12:58
y_waiwai

総合スコア88038

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hm1216

2019/12/13 06:20

合ってなかったようです。 ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問