Jawaban:
Sesuai balasan lainnya, ini bagus:
char c = '5';
int x = c - '0';
Selain itu, untuk pemeriksaan kesalahan, Anda mungkin ingin memeriksa apakah isdigit (c) benar terlebih dahulu. Perhatikan bahwa Anda tidak dapat melakukan hal yang sama secara portabel untuk surat, misalnya:
char c = 'b';
int x = c - 'a'; // x is now not necessarily 1
Standar menjamin bahwa nilai karakter untuk angka '0' hingga '9' berdekatan, tetapi tidak menjamin untuk karakter lain seperti huruf alfabet.
Kurangi '0' seperti ini:
int i = c - '0';
C Standard menjamin setiap digit di kisaran '0'..'9'adalah salah satu lebih besar dari angka sebelumnya (di bagian 5.2.1/3dari rancangan C99 ). Jumlah yang sama untuk C ++.
Jika, secara kebetulan, Anda ingin mengonversi serangkaian karakter menjadi bilangan bulat, Anda juga dapat melakukannya!
char *num = "1024";
int val = atoi(num); // atoi = ASCII TO Int
valsekarang 1024. Tampaknya atoi()baik-baik saja, dan apa yang saya katakan sebelumnya hanya berlaku untuk saya (di OS X (mungkin (masukkan lelucon Lisp di sini))). Saya pernah mendengar itu adalah makro yang memetakan secara kasar ke contoh berikutnya, yang menggunakan strtol(), fungsi yang lebih umum, untuk melakukan konversi sebagai gantinya:
char *num = "1024";
int val = (int)strtol(num, (char **)NULL, 10); // strtol = STRing TO Long
strtol() bekerja seperti ini:
long strtol(const char *str, char **endptr, int base);
Ini diubah *strmenjadi long, memperlakukannya seolah-olah itu adalah basebilangan dasar . Jika **endptrbukan nol, ia memegang karakter non-digit pertama yang strtol()ditemukan (tapi siapa yang peduli tentang itu).
itoa_s().
Kurangi char '0' atau int 48 seperti ini:
char c = '5';
int i = c - '0';
Penjelasan: Secara internal berfungsi dengan nilai ASCII . Dari tabel ASCII, nilai desimal karakter 5 adalah 53 dan 0 adalah 48 . Jadi 53 - 48 = 5
ATAU
char c = '5';
int i = c - 48; // Because decimal value of char '0' is 48
Itu berarti jika Anda mengurangi 48 dari karakter angka mana pun, itu akan mengubah bilangan bulat secara otomatis.
char numeralChar = '4';
int numeral = (int) (numeralChar - '0');
numeralChar - '0'sudah bertipe int, jadi Anda tidak perlu pemerannya. Bahkan jika tidak, pemerannya tidak diperlukan.
Untuk mengubah digit karakter menjadi bilangan bulat yang sesuai. Lakukan seperti yang ditunjukkan di bawah ini:
char c = '8';
int i = c - '0';
Logika di balik kalkulasi di atas adalah bermain-main dengan nilai ASCII. Nilai ASCII karakter 8 adalah 56, nilai ASCII karakter 0 adalah 48. Nilai ASCII dari integer 8 adalah 8.
Jika kita mengurangi dua karakter, pengurangan akan terjadi antara karakter ASCII.
int i = 56 - 48;
i = 8;
Jika hanya satu karakter 0-9 dalam ASCII, maka mengurangi nilai karakter nol ASCII dari nilai ASCII seharusnya berfungsi dengan baik.
Jika Anda ingin mengonversi angka yang lebih besar maka hal berikut akan dilakukan:
char *string = "24";
int value;
int assigned = sscanf(string, "%d", &value);
** jangan lupa untuk memeriksa status (yang seharusnya 1 jika berhasil dalam kasus di atas).
Paul.
Ketika saya perlu melakukan sesuatu seperti ini, saya membuat array dengan nilai yang saya inginkan.
const static int lookup[256] = { -1, ..., 0,1,2,3,4,5,6,7,8,9, .... };
Maka konversinya mudah
int digit_to_int( unsigned char c ) { return lookup[ static_cast<int>(c) ]; }
Ini pada dasarnya adalah pendekatan yang diambil oleh banyak implementasi pustaka ctype. Anda dapat dengan mudah mengadaptasi ini untuk bekerja dengan digit hex juga.
Cukup gunakan atol()fungsinya:
#include <stdio.h>
#include <stdlib.h>
int main()
{
const char *c = "5";
int d = atol(c);
printf("%d\n", d);
}
Jika digit Anda, katakanlah, '5'dalam ASCII ini direpresentasikan sebagai bilangan biner 0011 0101(53). Setiap digit memiliki empat bit tertinggi 0011dan 4 bit terendah mewakili digit dalam bcd. Jadi, lakukan saja
char cdig = '5';
int dig = cdig & 0xf; // dig contains the number 5
untuk mendapatkan 4 bit terendah, atau, yang sama, digitnya. Dalam asm, ia menggunakan andoperasi alih-alih sub(seperti dalam jawaban lain).
'5'adalah 53 ( 00110101)
Berikut adalah fungsi pembantu yang memungkinkan untuk mengubah digit dalam char menjadi int dan sebaliknya:
int toInt(char c) {
return c - '0';
}
char toChar(int i) {
return i + '0';
}
gunakan fungsi: atoi untuk array ke integer, atof untuk array ke tipe float; atau
char c = '5';
int b = c - 48;
printf("%d", b);