2013-02-13 76 views

回答

0

zero的ascii值從char中減去,所以在數字的情況下,該位置的數字值將被返回。

+0

它不一定是ASCII。雖然'0'到'9'總是連續的。 – Pubby 2013-02-13 05:55:27

+1

什麼,你認爲有人使用atoi()來對付EBCDIC? :) – 2013-02-13 05:58:32

+0

我需要閱讀兩次你的評論,我認爲你是正確的位置n IBM編碼應該是平等的。但是ASCII更常見不是嗎?關於Unicode,這取決於一些暗示。 – rekire 2013-02-13 05:58:59

3

它將ASCII字符'0'到'9'分別轉換爲整數值0到9。 (顯然,如果你確定*str實際上是字符'0'到'9'中的一個,這只是一個好主意。)

+0

所以如果我的char * str是「string」的話。數字的第一個值是什麼? – 2013-02-13 06:03:15

+1

這是atoi()的無效使用。垃圾進垃圾出。 atoi()的Linux手冊頁說「atoi()不檢測錯誤」。 但是,對您的問題的嚴格回答是:數字的第一個值將是對應於's'的整數值,減去對應於'0'的整數值。 – 2013-02-13 06:05:36

+0

@ RyanV.Bissell不要讀「人」,這是不好的,充滿了錯誤。 C11 7.22.1.2表示atoi相當於'(int)strtol(nptr,(char **)NULL,10)'。 C11 7.22.1.4/8'strtol ...「/ - /」...函數返回轉換後的值(如果有的話)。如果不能執行轉換,則返回零。' – Lundin 2013-02-13 07:45:32

1

* str可能指向字符值從'0' - '9',然而,如果用* str來使用簡單的算術,那麼可能無法按預期工作。如果* str指向字符'4'並且我們執行'4'+ 2,結果實際上是54,因爲'4'的ASCII值是52.所以通過從* str減去'0',我們將ASCII值轉換爲數字。 「4」 - 「0」 + 2 = 6

http://www.asciitable.com/

1

該字符值*str轉換成一個整數,通過從當前字符中減去數字'0'的編碼值。整數值將在0到9的範圍內。

這可以工作,因爲C保證數字0到9總是使用相鄰值進行編碼(即編碼值'1'保證與'0' + 1完全一致,並且等等)。

許多人似乎認爲這「利用」了ASCII的某些事實,但無論系統的本機編碼如何,這都必須適用於C運行的任何平臺。

相關問題