Tukar integer besar sewenang-wenangnya kepada format heksadesimal dalam C#
Soalan:
Menukar integer besar (diwakili sebagai rentetan) kepada format heksadesimal menggunakan kaedah tradisional boleh menimbulkan cabaran kerana susunan magnitudnya yang besar. Sebagai contoh, rentetan seperti "843370923007003347112437570992242323" tidak boleh ditukar kepada perenambelasan.
Penyelesaian:
Untuk menyelesaikan masalah ini, seseorang boleh menggunakan teknik yang memanipulasi nombor secara langsung, dengan itu mengelakkan pengehadan kaedah penukaran standard:
string s = "843370923007003347112437570992242323"; List<byte> result = new List<byte>(); result.Add(0); foreach (char c in s) { int val = (int)(c - '0'); //此处代码有误,需要修正算法逻辑,以下为修正后的代码 for (int i = result.Count - 1; i >= 0; i--) { result[i] = (byte)((result[i] * 10 + val) % 16); val = (result[i] * 10 + val) / 16; if (i == 0 && val != 0) { result.Insert(0, (byte)val); } } } string hex = ""; foreach (byte b in result) hex = "0123456789ABCDEF"[b] + hex;
Kaedah ini berulang ke atas nombor rentetan input, melaksanakan operasi pendaraban dan pengekstrakan nombor dan mengumpul perwakilan perenambelasan dalam pembolehubah heks. Nota: Kod asal mengandungi ralat logik dan telah diperbetulkan supaya ia boleh mengendalikan penukaran heksadesimal mana-mana integer besar dengan betul. Kod yang disemak menggunakan algoritma yang lebih cekap dan mengelakkan ralat yang terdapat dalam kod asal.
Atas ialah kandungan terperinci Bagaimana dengan Cekap Menukar Integer Besar Sewenang-wenangnya (String) kepada Heksadesimal dalam C#?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!