Apakah ada cara untuk mengubah karakter menjadi integer di C?
Misalnya, dari '5'
ke 5?
c
type-conversion
Mengalir
sumber
sumber
Kurangi '0' seperti ini:
C Standard menjamin setiap digit di kisaran
'0'..'9'
adalah salah satu lebih besar dari angka sebelumnya (di bagian5.2.1/3
dari rancangan C99 ). Jumlah yang sama untuk C ++.sumber
Jika, secara kebetulan, Anda ingin mengonversi serangkaian karakter menjadi bilangan bulat, Anda juga dapat melakukannya!
val
sekarang 1024. Tampaknyaatoi()
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 menggunakanstrtol()
, fungsi yang lebih umum, untuk melakukan konversi sebagai gantinya:strtol()
bekerja seperti ini:Ini diubah
*str
menjadilong
, memperlakukannya seolah-olah itu adalahbase
bilangan dasar . Jika**endptr
bukan nol, ia memegang karakter non-digit pertama yangstrtol()
ditemukan (tapi siapa yang peduli tentang itu).sumber
itoa_s()
.Kurangi char '0' atau int 48 seperti ini:
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
Itu berarti jika Anda mengurangi 48 dari karakter angka mana pun, itu akan mengubah bilangan bulat secara otomatis.
sumber
sumber
numeralChar - '0'
sudah bertipeint
, 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:
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.
sumber
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:
** jangan lupa untuk memeriksa status (yang seharusnya 1 jika berhasil dalam kasus di atas).
Paul.
sumber
sumber
Ketika saya perlu melakukan sesuatu seperti ini, saya membuat array dengan nilai yang saya inginkan.
Maka konversinya mudah
Ini pada dasarnya adalah pendekatan yang diambil oleh banyak implementasi pustaka ctype. Anda dapat dengan mudah mengadaptasi ini untuk bekerja dengan digit hex juga.
sumber
Periksa ini,
hanya 0,1,2, ...., E, F.
sumber
Cukup gunakan
atol()
fungsinya:sumber
Jika digit Anda, katakanlah,
'5'
dalam ASCII ini direpresentasikan sebagai bilangan biner0011 0101
(53). Setiap digit memiliki empat bit tertinggi0011
dan 4 bit terendah mewakili digit dalam bcd. Jadi, lakukan sajauntuk mendapatkan 4 bit terendah, atau, yang sama, digitnya. Dalam asm, ia menggunakan
and
operasi alih-alihsub
(seperti dalam jawaban lain).sumber
'5'
adalah 53 (00110101
)Berikut adalah fungsi pembantu yang memungkinkan untuk mengubah digit dalam char menjadi int dan sebaliknya:
sumber
gunakan fungsi: atoi untuk array ke integer, atof untuk array ke tipe float; atau
sumber
Anda akan melemparkannya ke int (atau float atau double atau apa pun yang ingin Anda lakukan dengannya) dan menyimpannya dalam variabel anoter.
sumber