Pengguna anonim
Lebih
Mengkonversi heksadesimal string ke integer efisien di C?
Dalam C, apa adalah cara yang paling efisien untuk mengkonversi string hex digit biner menjadi unsigned int
atau unsigned long
?
Misalnya, jika saya memiliki hingga 0xfffffffe
, aku ingin int
dengan base10 nilai 4294967294
.
23
16
Anda ingin
strtol
ataustrtoul
. Lihat juga Unix halamanEdit: Sekarang kompatibel dengan MSVC, C++ dan non-GNU compiler (lihat akhir).
Pertanyaan itu "cara yang paling efisien." OP doesn't menentukan platform, ia bisa menyusun sebuah RISC berbasis ATMEL chip dengan 256 byte penyimpanan flash untuk kode nya.
Sebagai catatan, dan untuk orang-orang (seperti saya), yang menghargai perbedaan antara "cara termudah" dan "cara yang paling efisien", dan yang menikmati belajar...
Coba ini:
Jika anda don't memiliki stdlib maka anda harus melakukannya secara manual.
Untuk Mikrokontroler AVR yang saya tulis fungsi berikut, termasuk komentar yang relevan untuk membuatnya mudah untuk memahami:
Karena jika sering terjadi, pertanyaan anda menderita serius terminologi kesalahan/ambiguitas. Dalam pidato umum itu biasanya doesn't peduli, tapi dalam konteks ini masalah tertentu itu sangat penting.
Anda lihat, ada's ada hal seperti itu sebagai "nilai hex" dan "nilai desimal" (atau "nomor hex" dan "angka desimal"). "Hex" dan "desimal" adalah sifat-sifat pernyataan dari nilai-nilai. Sementara itu, nilai-nilai (atau angka) dengan sendirinya tidak memiliki representasi, sehingga mereka dapat't "hex" atau "desimal". Misalnya,
0xF
dan15
dalam sintaks C adalah dua hal yang berbeda pernyataan dari jumlah yang sama.Saya akan menebak bahwa pertanyaan anda, cara itu menyatakan, menunjukkan bahwa anda perlu mengkonversi ASCII hex representasi dari sebuah nilai (yaitu string) ke ASCII desimal representasi dari sebuah nilai (string lain). Salah satu cara untuk melakukannya adalah dengan menggunakan integer representasi sebagai perantara satu: pertama, mengkonversi ASCII hex representasi integer ukuran yang cukup (menggunakan fungsi dari
strto...
kelompok, sepertistrtol
), kemudian mengkonversi bilangan bulat ke dalam representasi desimal ASCII (menggunakansprintf
).Jika itu's tidak apa yang perlu anda lakukan, maka anda harus menjelaskan pertanyaan anda, karena itu adalah mungkin untuk mencari tahu dari cara anda pertanyaan yang dirumuskan.
Heksadesimal ke desimal. Don't jalankan di online compiler, karena itu tidak't bekerja.
Untuk yang lebih besar Hex string seperti pada contoh yang saya butuhkan untuk menggunakan strtoul.
@Eric
Saya don't benar-benar berpikir solusi anda harus telah ditolak, namun saya duga mengapa itu's terjadi adalah karena itu's kurang praktis. Ide dengan voting adalah bahwa "terbaik" jawabannya akan mengapung ke atas, dan sementara jawaban anda mungkin akan lebih instruktif tentang apa yang terjadi di bawah kap mesin (atau cara itu mungkin terjadi), it's pasti bukan cara terbaik untuk mengurai hex angka-angka dalam suatu sistem produksi.
Sekali lagi, saya don't pikir ada's sesuatu yang salah dengan jawaban anda dari sudut pandang pendidikan, dan saya pasti tidak't (dan tidak't) memilih ke bawah. Don't berkecil hati dan berhenti mem-posting hanya karena beberapa orang tidak't seperti salah satu dari jawaban anda. Hal ini terjadi.
Saya meragukan jawaban saya membuat anda merasa baik tentang anda yang ditolak, tapi aku tahu itu's sangat tidak menyenangkan ketika anda bertanya mengapa sesuatu's yang ditolak dan tidak ada answers.
Mungkin karena serta menjadi jelek ini isn't pendidikan dan doesn't bekerja. Juga, saya menduga bahwa seperti saya, kebanyakan orang-orang yang don't memiliki kekuatan untuk mengedit saat ini (dan dilihat dari peringkat yang dibutuhkan - tidak akan pernah).
Penggunaan array dapat baik untuk efisiensi, tapi yang's tidak disebutkan dalam kode ini. Hal ini juga tidak memperhitungkan dari atas dan bawah sehingga tidak bekerja untuk contoh yang diberikan dalam pertanyaan. FFFFFFFE
Mencoba untuk Mengkonversi dari Desimal ke Hex
@Eric
Yah, aku'm tidak ada C guru, tapi di sini's apa yang saya datang dengan:
Di C, anda dapat mengkonversi nomor heksadesimal ke desimal dalam banyak cara. Salah satu cara adalah untuk cor nomor heksadesimal untuk bilangan bulat. Saya pribadi menemukan ini untuk menjadi sederhana dan kecil.
Berikut adalah contoh kode untuk mengubah angka Heksadesimal ke bilangan Desimal dengan bantuan casting.
Seperti yang tertulis sebelumnya, efisiensi pada dasarnya tergantung pada apa yang mengoptimalkan.
Ketika optiming untuk baris kode, atau hanya bekerja di lingkungan tanpa sepenuhnya-dilengkapi standar perpustakaan yang cepat dan kotor bisa menjadi pilihan:
Ini saat ini hanya bekerja dengan kasus yang lebih rendah tapi super mudah untuk membuatnya bekerja dengan baik.