歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> C語言將字符串轉換成對應的數字(十進制、十六進制)

C語言將字符串轉換成對應的數字(十進制、十六進制)

日期:2017/3/1 10:39:19   编辑:Linux編程
問題1:講一個十進制數字的字符串表示轉換成對應的整數。舉例:將“1234”轉換成整數1234.
  1. /*將字符串s轉換成相應的整數*/
  2. int atoi(char s[])
  3. {
  4. int i;
  5. int n = 0;
  6. for (i = 0; s[i] >= '0' && s[i] <= '9'; ++i)
  7. {
  8. n = 10 * n + (s[i] - '0');
  9. }
  10. return n;
  11. }

問題2:將一個十六進制數的字符串表示形式轉換成對應的整數。所謂的十六進制數的字符串形式是指字符串只包含'0'-'9'或者'a'-'z'或者'A'-'Z',前導“0x”或者“0X”是否出現都可以。

要解決這個問題,還需要一個將大寫字母轉換成小寫字母的工具函數:

  1. /*將大寫字母轉換成小寫字母*/
  2. int tolower(int c)
  3. {
  4. if (c >= 'A' && c <= 'Z')
  5. {
  6. return c + 'a' - 'A';
  7. }
  8. else
  9. {
  10. return c;
  11. }
  12. }

下面是轉換函數:

  1. //將十六進制的字符串轉換成整數
  2. int htoi(char s[])
  3. {
  4. int i;
  5. int n = 0;
  6. if (s[0] == '0' && (s[1]=='x' || s[1]=='X')) //判斷是否有前導0x或者0X
  7. {
  8. i = 2;
  9. }
  10. else
  11. {
  12. i = 0;
  13. }
  14. for (; (s[i] >= '0' && s[i] <= '9')
  15. || (s[i] >= 'a' && s[i] <= 'z') || (s[i] >='A' && s[i] <= 'Z');++i)
  16. {
  17. if (tolower(s[i]) > '9')
  18. {
  19. n = 16 * n + (10 + tolower(s[i]) - 'a');
  20. }
  21. else
  22. {
  23. n = 16 * n + (tolower(s[i]) - '0');
  24. }
  25. }
  26. return n;
  27. }
Copyright © Linux教程網 All Rights Reserved