簡體   English   中英

如何在C ++中將char正確轉換為int?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM