Rumah > pembangunan bahagian belakang > C++ > Bagaimana dengan Cekap Menukar Rentetan kepada Heksadesimal dan Sebaliknya dalam C?

Bagaimana dengan Cekap Menukar Rentetan kepada Heksadesimal dan Sebaliknya dalam C?

Mary-Kate Olsen
Lepaskan: 2024-12-18 18:23:11
asal
640 orang telah melayarinya

How to Efficiently Convert Strings to Hexadecimal and Vice Versa in C  ?

Menukar Rentetan kepada Perenambelasan dan Sebaliknya dalam C

Menukar rentetan kepada perenambelasan dan sebaliknya ialah tugas biasa dalam banyak senario pengaturcaraan. Dalam C , terdapat beberapa pendekatan untuk mencapai penukaran ini dengan cekap.

Rentetan kepada Penukaran Heksadesimal

Untuk menukar rentetan kepada perwakilan heksadesimalnya, kita boleh menggunakan gelung dan operasi bitwise. Untuk setiap aksara dalam rentetan, kita boleh mengekstrak nilai ASCIInya, menukarkannya kepada perenambelasan menggunakan teknik anjakan bit (anjakan ke kanan dan kiri), dan tambahkan digit heks yang terhasil pada rentetan output.

Berikut ialah contoh pelaksanaan:

std::string string_to_hex(const std::string& input) {
    static const char hex_digits[] = "0123456789ABCDEF";

    std::string output;
    output.reserve(input.length() * 2);

    for (unsigned char c : input) {
        output.push_back(hex_digits[c >> 4]);
        output.push_back(hex_digits[c & 15]);
    }

    return output;
}
Salin selepas log masuk

Heksadesimal ke Rentetan Penukaran

Untuk menyahkod rentetan perenambelasan kembali ke dalam perwakilan aksara asalnya, kami menggunakan struktur gelung yang serupa. Kami menghuraikan rentetan input dua aksara pada satu masa, menukar setiap pasangan digit heks kepada nilai ASCII yang sepadan menggunakan jadual carian atau operasi bitwise dan mengumpul aksara yang dinyahkod dalam rentetan output.

Berikut ialah fungsi untuk lakukan penukaran ini:

std::string hex_to_string(const std::string& input) {
    const auto len = input.length();
    if (len & 1) throw std::invalid_argument("odd length");

    std::string output;
    output.reserve(len / 2);

    for (auto it = input.begin(); it != input.end(); ) {
        int hi = hex_value(*it++);
        int lo = hex_value(*it++);
        output.push_back(hi << 4 | lo);
    }

    return output;
}

int hex_value(unsigned char hex_digit) {
    static const signed char hex_values[256] = {...};
    int value = hex_values[hex_digit];
    if (value == -1) throw std::invalid_argument("invalid hex digit");
    return value;
}
Salin selepas log masuk

Atas ialah kandungan terperinci Bagaimana dengan Cekap Menukar Rentetan kepada Heksadesimal dan Sebaliknya dalam C?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan