2

この質問は言語に依存しませんが、これらのc /c++の質問に触発されています。

単一の文字をintに変換する方法

Cでの文字から整数への変換

数字の文字(0123456789)がすべてのテキストエンコーディングで連続して表示されると想定しても安全ですか?

つまり、次のように想定しても安全です

'9'-'8' = 1
'9'-'7' = 2
...
'9'-'0' = 9

すべてのエンコーディングで?

私はこれに対する決定的な答えを楽しみにしています:)

ありがとう、

更新:わかりました。すべてのエンコーディングを、ASCIIやEBCDIC以降の古いものを意味するように制限します。Sandscrit私はそれほど心配していません。。。

4

5 に答える 5

6

すべてのエンコーディングについてはわかりませんが、少なくともASCIIおよび<shudder> EBCDICでは、0〜9の数字はすべて連続して数字の昇順で表示されます。つまり、ASCIIベースおよびEBCDICベースのすべてのエンコーディングでも、数字を順番に並べる必要があります。したがって、モールス信号またはそれ以上のコードを除いて、遭遇するほとんどすべてのことについて私は「はい」と言います。

于 2009-04-23T16:07:41.930 に答える
3

ネガティブなことを証明するのは難しいでしょう。これまでに発明されたすべてのテキストエンコーディングを誰も知ることができないでしょう。

現在一般的に使用されているすべてのエンコーディング(EBCDICを除き、まだ一般的に使用されていますか?)はASCIIのスーパーセットです。「0」から「9」の厳密な順序が当てはまらない実際的な環境を見つけるよりも、宝くじに当選する可能性が高いと思います。

于 2009-04-23T16:18:39.237 に答える
3

C ++およびCプログラムのテキストの場合、C ++標準とC標準の両方で、これがそうである必要があります。

于 2009-04-23T16:19:54.117 に答える
2

K&RANSICによるとそうです。

抜粋:

... "この特定のプログラムは、数字の文字表現のプロパティに依存しています。たとえば、テスト

if (c >= '0' && c <= '9') ...

の文字cが数字かどうかを判別します。そうである場合、その桁の数値は

c - '0'

これは、'0', '1', ..., '9'値が連続して増加する場合にのみ機能します。幸い、これはすべての文字セットに当てはまります。...」

于 2009-04-23T16:17:38.927 に答える
2

私が知っているすべてのテキストエンコーディングは、通常、数字の各表現を順番に並べます。ただし、日本語など、他のすべての数字表現を他のエンコーディングに含めると、質問はさらに広範になります。数字の文字がどのように違うかに気づきましたか?まあ、それらは実際には異なるコードポイントです。ですから、あなたの質問への答えは難しいかもしれません。なぜなら、そこには非常に多くのエンコーディングがあり、それらには数字の複数の表現があるからです。

より良い質問は、自分自身に問いかけることです。そもそも、連続したコードポイントにある数字を当てにする必要があるのはなぜですか。

于 2009-04-23T16:25:11.403 に答える