1. 字符串轉換爲數字
1.1. 簡單轉換
double atof(const char *string);
double _wtof(const wchar_t *string);
int atoi(const char *string);
__int64 _atoi64(const char *string);
int _wtoi(const wchar_t *string);
__int64 _wtoi64(const wchar_t *string);
long atol(const char *string);
long _wtol(const wchar_t *string);
1.2. 指定轉換基數
double strtod(const char *nptr, char **endptr);
double wcstod(const wchar_t *nptr, wchar_t **endptr );
unsigned __int64 _strtoui64(const char *nptr, char **endptr, int base);
unsigned __int64 _wcstoui64( const wchar_t *nptr, wchar_t **endptr, int base );
long strtol(const char *nptr, char **endptr, int base );
long wcstol(const wchar_t *nptr, wchar_t **endptr, int base);
string = "0xa10110This stopped it";
string = "a10110This stopped it"; // 均可
long lVal = strtol(string, &stopstring, 16);
1.3. 字符串格式化轉換
char szFloat[]="123.321";
float fVal = 0.0;
sscanf_s(szFloat, "%f", &fVal);
char szDouble[] = "3.1415926535897";
double dVal = 0.0;
sscanf_s(szDouble, "%lf", &dVal);
2. 數字轉字符串
2.1. sprintf_s
char szVal[32] = {0};
unsigned _int64 val = 121222222222;
sprintf_s(szVal, sizeof(szTemp), "%llx", val);
2.2. CString.Format
CString strVal;
UINT uVal = 0x12345;
strVal.Format("%#.8x", uVal); // 0x00012345
3. 附字符串格式化表
類型 | 意義 |
---|---|
%d | 十進制有符號整型 |
%u | 十進制無符號整型 |
%f | 單精度浮點類型 |
%lf | 雙精度浮點類型 |
%x | 16整形 |
%s | 字符串類型 |
%c | 單個字符 |
%p | 指針的值 |
%lld | 64位十進制有符號整形 |
%llu | 64位十進制無符號整形 |
%llx | 64位十六進制整形 |
4. 格式化字符串形式
[標誌][輸出最小寬度][.精度][長度]類型
4.1. 標誌
- 輸出符號(正號或負號)空格輸出值爲正時冠以空格,爲負時冠以負號
- 結果左對齊,右邊填空格
- # 對o類, 在輸出時加前綴。對x類,在輸出時加前綴0x。
4.2. 輸出最小寬度
用十進制整數來表示輸出的最少位數。 若實際位數多於定義的寬度,則按實際位數輸出, 若實際位數少於定義的寬度則補以空格或0。
4.3. 精度
精度格式符以“.”開頭,後跟十進制整數。本項的意義是:如果輸出數字,則表示小數的位數;如果輸出的是字符, 則表示輸出字符的個數;若實際位數大於所定義的精度數,則截去超過的部分。
4.4. 長度
例如: %6.9s 表示顯示一個長度不小於6且不大於9的字符串。若大於9, 則第9個字符以後的內容將被刪除。
5. 字符串處理
5.1. %[ ] 用法
%[ ]表示要讀入一個字符集合, 如果[ 後面第一個字符是”^”,則表示反意思。遇不到第一個不滿足要求的即停止截取字符串。*表示跳過當前的獲取。
char szVal[32] = {0};
char szSrc[]="HELLOkitty12349ABC";
sscanf_s(szSrc, "%[A-Z]", szVal, sizeof(szVal)); // szValue = HELLO,遇到小寫的k停止。
sscanf_s(szSrc, "%[A-Z,a-z]", szVal, sizeof(szVal)); // szValue = HELLOkitty,遇到數字1停止
sscanf_s(szSrc, "%[HEk]", szVal, sizeof(szVal)); // szValue = HE,遇到L不滿足集合要求停止。
sscanf_s(szSrc, "%[^a-z]", szVal, sizeof(szVal)); // szValue = HELLO,遇到k屬於小寫停止
sscanf_s(szSrc, "%[^1234]", szVal, sizeof(szVal)); // szValue = HELLOkitty,遇到數字1停止
sscanf_s(szSrc, "%*[A-Z]%s", szVal, sizeof(szVal)); // szValue = kitty12349ABC,跳過大寫字母
sscanf_s(szSrc, "%*[A-Z]%[a-z]", szVal, sizeof(szVal));// szValue = kitty,跳過大寫,只獲取小寫
// szValue = 12349,跳過所有字母,只要數字
sscanf_s(szSrc, "%*[A-Z]%*[a-z]%[1-9]", szVal, sizeof(szVal));
// szValue = ABC,跳過前面大寫,小寫,數字,然後獲取後面所有字符
sscanf_s(szSrc, "%*[A-Z]%*[a-z]%*[1-9]%s", szVal, sizeof(szVal));