[英]How to properly convert char to int in c++?
在將char轉換為c ++的int時,遇到了一個我以前從未遇到過的獨特問題。
我正在遍歷一串稱為total_line的整數,其內容為:
1526
我正在嘗試將所有其他字符轉換為int,這是我的代碼:
cout << total_line[i+1] <<endl;
int d = total_line[i+1] <<endl;
cout << d << endl;
i++;
我的輸出奇怪的是:
5
53
6
54
我不確定為什么將5轉換為int 53而將6轉換為int 54。
就像其他人提到的那樣,字符實際上表示為映射到字符表的數字。 數字到字符的映射取決於所選的字符集而有所不同, 例如 ,對於US-ASCII,字符'1'
和'2'
對應於數字49和50( 有關完整的US-ASCII表,請參見此處 )。
要將數字的字符串表示形式轉換為帶符號的整數,請使用std::stoi
(自C ++ 11起)。
以下代碼片段將字符串切成單獨的數字,並使用std::stoi
分別將其轉換為數字。
for (std::string::size_type i = 0, n = total_line.size(); i != n; ++i) {
int d = std::stoi(total_line.substr(i, 1));
std::cout << d << std::endl;
}
使用標准庫函數std::stoi
的優點是無論字符編碼如何均可工作。
只需查看ascii表 (Linux上的man ascii)
Oct Dec Hex Char
---------------------
060 48 30 0
061 49 31 1
062 50 32 2
063 51 33 3
064 52 34 4
-> 065 |53| 35 |5|
-> 066 |54| 36 |6|
067 55 37 7
070 56 38 8
071 57 39 9
因此,您可以看到將5轉換為53並將6轉換為54的原因是因為char'5 '的十進制值不是5而是53(與6相同)。
如果要將char轉換為int,請嘗試以下操作:
int d = total_line[i] - '0';
我不推薦你這個:
int d = total_line[i] - 48;
由於可移植性 (感謝Pete Becker),並不是所有人都知道'0'的十進制值並直接使用'0'更容易理解。
這行看起來很奇怪:
int d = total_line[i+1] <<endl;
流operator<<
和endl
在那做什么?
為什么不簡單地這樣做呢?
int d = total_line[i+1];
您需要從位置i
而不是i+1
進行讀取,並且第二行中還有一個額外的endl
。 您獲得的值是您嘗試讀取的字符的ASCII
值。 為了將它們轉換為int
您需要從中減去ASCII值“ 0”。 而且,如果您在for
循環中操作,則無需顯式增加i
。 這也許就是您跳過字符的原因
這可能會有所幫助:
cout << total_line[i] <<endl;
int d = total_line[i];
cout << d - '0' << endl;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.