0

次のコードがあります。

while (*str != '\0')
{
  digit = *str - '0';
  result = result * radix + digit;
  str++;
}

とは*str -'0'どういう意味ですか?

4

4 に答える 4

3

ASCII 文字 '0' から '9' をそれぞれ整数値 0 から 9 に変換します。*str(明らかに、これは実際に文字 '0' から '9' のいずれかであると確信している場合にのみ良い考えです。)

于 2013-02-13T05:54:48.890 に答える
1

* strは、「0」から「9」までの文字値を指す場合がありますが、* strで単純な算術を使用すると、期待どおりに機能しない場合があります。*strが文字「4」を指して「4」+2を実行した場合、「4」のASCII値は52であるため、結果は実際には54になります。したがって、*strから「0」を引くことによってASCII値を次のように変換します。数字。'4'-'0' + 2 = 6

http://www.asciitable.com/

于 2013-02-13T06:05:00.570 に答える
1

これは、現在の文字から数字のエンコードされた値を減算することにより、文字値*strを整数に変換します。'0'整数の値は 0 から 9 の範囲になります。

これは、0 から 9 までの数字が常に隣接する値を使用してエンコードされることを C が保証するため (つまり、 のエンコードされた値は'1'正確'0' + 1に であることが保証されるなど) から機能します。

多くの人は、これが何らかの形で ASCII の事実を「悪用」していると考えているようですが、これは、システムのネイティブ エンコーディングに関係なく、C が実行されるすべてのプラットフォームで機能するはずです。

于 2013-02-13T07:28:38.043 に答える
0

ゼロのアスキー値は char から減算されるため、数字の場合はその位置の数値が返されます。

于 2013-02-13T05:54:26.520 に答える