bloggerads

2017年4月19日 星期三

C : 好用的parsing 數字字串函式 strtol

strol (Convert string to long integer)

須include stdlib.h, 他的原型是 

long int strtol (const char* str, char** endptr, int base);

return value 是 轉換後的十進位值

第一個引數 str 是待轉換的數字字串指標

第二個引數 endptr 則是提供回傳parsing整串字串中, 空白字元分隔的下一個數字字串位址。 如果不用回傳,則給 NULL 即可

第三個引數是說明以什麼格式來 parsing 這個數字字串,  如 2 進位就給 2, 16 進位就給 16, 0 就是 自動偵測數字字串的格式。 (ps.) 16 進位可接受開頭為0x, 亦可接受大小寫



以下是範例


#include <stdio.h>
#include <stdlib.h>

int main ()
{
  char szNumbers[] = "2001 ff -1101 0xa0";
  char * pEnd;
  int i1, i2, i3, i4;
  i1 = strtol (szNumbers, &pEnd, 10);
  i2 = strtol (pEnd, &pEnd, 16);
  i3 = strtol (pEnd, &pEnd, 2);
  i4 = strtol (pEnd, NULL, 0);
  printf ("The decimal equivalents are: %d, %d, %d and %d.\n", i1, i2, i3, i4);
  return 0;
}
____________OUTPUT____________

The decimal equivalents are: 2001, 255, -13 and 160.

必須自行檢查輸入錯誤, strol 沒有輸入錯誤的檢查

原文請參考 C++論壇 

沒有留言:

張貼留言