教えて!gooにおける不適切な投稿への対応について

苦しんでCを読んでchar型は文字列しか表せないとわかっていますが、
例えばchar str[] = "0123456789";を文字としての123456789ではなく数値としての123456789として表示することは可能なのでしょうか?
多分、char型をint型に変えるなどしないといけないのかなとは思っています。

gooドクター

A 回答 (7件)

char型というものを何か勘違いしているのかもしれません



char型とは
1バイトの符号付整数。: -128 ~ 127を扱える型です

char='1'というのは数値で表すと49になります、1という意味ではありません


>また、文字列の中の一文字だけを数値として表示するにはどうすればよいですか?

char str[] = "0123456789";
'3'を数値として出力したいのでしたら
printf("%d\n", str[3]-'0');

printf("%d", str[3]-48)

と'0'か48を引いてあげれば良いです
    • good
    • 1
この回答へのお礼

たしかにそれでもできますが、出来れば、charで定義した数値の数列として、ようはchar str[] = "0123456789";の4の数値が
str[5]により数値4と表示したいのです。

お礼日時:2021/02/21 12:29

No4です


>逆に数値としてのcharの書き方と文字としてのcharの書き方を教えて欲しいですね。

数値としてのcharの書き方 a[0]=97; a[1]=0x61;
文字としてのcharの書き方 a[2]='a';

でしょうかね。

おまけ1 「数値として」「文字として」はあくまでも人の都合ですので、人にとってわかりやすい書き方というだけで、機械語に翻訳されたら同じになりますので念の為。

おまけ2  'a' と97が同じになるのは、私のPCの環境での話です。別のPC(文字コードが違う場合)は違う結果になります。

おまけ3 コンパイル結果
; a[0]=97;
;
?debug L 12
mov byte ptr [ebp-3],97
;
; a[1]=0x61;
;
?debug L 13
mov byte ptr [ebp-2],97
;
; a[2]='a';
;
?debug L 14
mov byte ptr [ebp-1],97
    • good
    • 1

No.3ですが、No.5さんへのお礼についてです。



それは不可能です。

No.5さんの説明の通り、No.3でも説明させていただいていますが、数値型の1と文字型の1は別の値になるので、ひと手間は必ず必要になります。
    • good
    • 0

>苦しんでCを読んでchar型は文字列しか表せないとわかっていますが、


誤解されているようですね

一連の質問を見ての感想ですが
疑問に思ったCのプログラムをコンパイルしてアセンブラに変換して、それをご覧になれば、ここで質問するよりも、適切な回答が得られ納得される気がします。
    • good
    • 0
この回答へのお礼

ありがとうこざいます。
逆に数値としてのcharの書き方と文字としてのcharの書き方を教えて欲しいですね。

お礼日時:2021/02/21 12:01

char型は1バイトの文字を表し、質問のように配列にすることにより文字列を表すことができます。



メモリの話をすると、メモリ上には0と1だけがズラーっと登録されおり、各型を指定する場合は、どれくらいのサイズをどこで区切って、どのように解釈するかで見える形にしています。

なので、char型を数値として表すにはひと手間加える必要があるのです。


パッと調べた感じですが、原理を知るにはこちらがわかりやすいかも知れません。
https://marycore.jp/prog/c-lang/convert-or-cast- …
    • good
    • 0

> 例えばchar str[] = "0123456789";を文字としての123456789ではなく数値としての123456789として表示することは可能なのでしょうか?



えっと。。。
「表示する」というと画面や紙に表示するということですから文字列でなければなりません。
プログラム内部で数値として加減乗除を行うということであればint型ということになります。
文字列の数値を整数に変換するには標準関数のatoi(ASCII to integer)を使います。

https://ja.wikipedia.org/wiki/Atoi

参考まで。
    • good
    • 0

stdlib.hのatoiという関数を使うと文字列の数字を数値へと変換できます



また
>char型は文字列しか表せないとわかっていますが

これは間違いです
char型は数値としても扱えます
    • good
    • 0
この回答へのお礼

えと、char型は数値としても使えるとは、どんなchar str[]の書き方が数値としての文字列をかけるのでしょうか?
また、文字列の中の一文字だけを数値として表示するにはどうすればよいですか?

お礼日時:2021/02/21 11:54

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

gooドクター

このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング