Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C++

Chuyển đổi char sang int trong C và C++

Chuyển đổi phụ thuộc vào ý định: giá trị ASCII của ký tự, hay giá trị số mà ký tự đại diện (vd: '5' → 5).

C - 3 phương pháp

1. Type casting (Lấy mã ASCII)

char c = 's';
int ascii = (int)c; // 115 (mã ASCII của 's')

2. atoi() - Chuỗi số → int

#include <stdlib.h>
const char* str = "12345";
int val = atoi(str); // 12345
// Lỗi: atoi("abc") = 0 (không phân biệt được 0 hợp lệ và lỗi)

3. sscanf() - An toàn hơn, parse từ chuỗi

#include <stdio.h>
const char* str = "12345";
int val;
sscanf(str, "%d", &val); // Trả về số item parsed (1 nếu thành công)

Ví dụ C đầy đủ

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

int main() {
    const char* str = "12345";
    char c = 's';
    int x, y, z;
    
    sscanf(str, "%d", &x);  // 12345
    y = atoi(str);           // 12345
    z = (int)c;              // 115 (ASCII 's')
    
    printf("sscanf: %d\n", x);
    printf("atoi:   %d\n", y);
    printf("cast:   %d\n", z);
    return 0;
}

Kết quả

sscanf: 12345
atoi:   12345
cast:   115

C++ - 2 phương pháp hiện đại

1. stoi() - String → int (C++11)

#include <string>
std::string s = "45";
int x = std::stoi(s); // 45

// Overload với base và index
size_t pos;
int val = std::stoi("100abc", &pos, 10); // val=100, pos=3

2. Type casting (ASCII value)

char c = 's';
int ascii = static_cast(c); // 115

3. C++17: std::from_chars (Hiệu năng cao, no exception)

#include <charconv>
#include <string_view>

std::string_view sv = "12345";
int value;
auto result = std::from_chars(sv.data(), sv.data() + sv.size(), value);
if (result.ec == std::errc()) {
    // Thành công, value = 12345
}

Bảng so sánh

Khuyến nghị

  • Lấy mã ASCII: static_cast<int>(c)
  • Parse string số (C++17+): std::from_chars
  • Parse string số (C++11-14): std::stoi (bắt exception)
  • C code: strtol (tốt hơn atoi - có error checking)
Phương phápInputOutputError handlingGhi chú
(int)ccharASCII codeN/ALuôn thành công
atoi()const char*intTrả 0 (mơ hồ)C legacy
sscanf()const char*int*Return countC standard
stoi()stringintThrow exceptionC++11
from_charschar*int&error_codeC++17, fastest