Rumah > pembangunan bahagian belakang > C++ > Kemahiran pelaksanaan fungsi penukaran dan pengekodan dan penyahkodan data C++ dalam pembangunan sistem terbenam

Kemahiran pelaksanaan fungsi penukaran dan pengekodan dan penyahkodan data C++ dalam pembangunan sistem terbenam

WBOY
Lepaskan: 2023-08-26 17:24:24
asal
1222 orang telah melayarinya

Kemahiran pelaksanaan fungsi penukaran dan pengekodan dan penyahkodan data C++ dalam pembangunan sistem terbenam

Kemahiran pelaksanaan fungsi penukaran dan pengekodan dan penyahkodan data C++ dalam pembangunan sistem terbenam

Dalam pembangunan sistem terbenam, penukaran dan pengekodan dan penyahkodan data adalah salah satu fungsi yang sangat penting. Sama ada ia menukar data daripada satu format kepada format yang lain, atau pengekodan dan penyahkodan data untuk penghantaran dan penyimpanan, teknik dan algoritma yang berkesan diperlukan untuk mencapainya. Sebagai bahasa pengaturcaraan yang digunakan secara meluas dalam pembangunan sistem terbenam, C++ menyediakan banyak perpustakaan dan alatan untuk menyokong pelaksanaan penukaran data dan fungsi pengekodan dan penyahkodan.

Di bawah, kami akan memperkenalkan beberapa teknik biasa untuk melaksanakan penukaran data dan pengekodan dan penyahkodan dalam C++, serta melampirkan contoh kod yang sepadan.

1. Penukaran jenis data

Dalam pembangunan sistem terbenam, selalunya perlu untuk menukar jenis data yang berbeza. Sebagai contoh, tukar integer kepada rentetan, rentetan kepada integer, apungkan kepada integer, dsb. C++ menyediakan beberapa perpustakaan untuk menyokong operasi penukaran ini.

  1. Penukaran integer dan rentetan

Untuk menukar integer kepada rentetan, anda boleh menggunakan kelas aliran ostring. Berikut ialah contoh kod:

#include <iostream>
#include <sstream>

int main() {
    int num = 123;
    std::ostringstream oss;
    oss << num;
    std::string str = oss.str();
    std::cout << "Integer to string: " << str << std::endl;
    
    return 0;
}
Salin selepas log masuk

Untuk menukar rentetan kepada integer, anda boleh menggunakan kelas istringstream. Berikut ialah contoh kod:

#include <iostream>
#include <string>
#include <sstream>

int main() {
    std::string str = "123";
    std::istringstream iss(str);
    int num;
    iss >> num;
    std::cout << "String to integer: " << num << std::endl;

    return 0;
}
Salin selepas log masuk
  1. Penukaran nombor titik terapung kepada integer

Untuk menukar nombor titik terapung kepada integer, anda boleh menggunakan operator jenis cast. Berikut ialah contoh kod:

#include <iostream>

int main() {
    double num = 3.14;
    int integer = static_cast<int>(num);
    std::cout << "Double to integer: " << integer << std::endl;

    return 0;
}
Salin selepas log masuk

Untuk menukar integer kepada nombor titik terapung, anda boleh menggunakan operator cast jenis. Berikut ialah contoh kod:

#include <iostream>

int main() {
    int integer = 3;
    double num = static_cast<double>(integer);
    std::cout << "Integer to double: " << num << std::endl;

    return 0;
}
Salin selepas log masuk

2. Pengekodan dan penyahkodan

Dalam sistem terbenam, selalunya perlu untuk mengekod dan menyahkod data untuk penghantaran dan penyimpanan. Contohnya, memampatkan dan menyahmampat data, menyulitkan dan menyahsulit data, dan sebagainya. C++ menyediakan beberapa perpustakaan untuk menyokong operasi pengekodan dan penyahkodan ini.

  1. Mampatan dan penyahmampatan data

Dalam C++, anda boleh menggunakan perpustakaan zlib untuk mencapai pemampatan dan penyahmampatan data. Berikut ialah contoh kod:

#include <iostream>
#include <string>
#include <cstring>
#include <zlib.h>

std::string compress(const std::string& str) {
    z_stream zs;
    memset(&zs, 0, sizeof(zs));
    
    if (deflateInit(&zs, Z_DEFAULT_COMPRESSION) != Z_OK) {
        return "";
    }
    
    zs.next_in = (Bytef*)(str.c_str());
    zs.avail_in = str.size() + 1;
    
    char outbuffer[32768];
    std::string outstring;
    
    do {
        zs.next_out = reinterpret_cast<Bytef*>(outbuffer);
        zs.avail_out = sizeof(outbuffer);
        
        if (deflate(&zs, Z_FINISH) == Z_STREAM_ERROR) {
            deflateEnd(&zs);
            return "";
        }
        
        outstring.append(outbuffer, sizeof(outbuffer) - zs.avail_out);
        
    } while (zs.avail_out == 0);
    
    deflateEnd(&zs);
    
    return outstring;
}

std::string decompress(const std::string& str) {
    z_stream zs;
    memset(&zs, 0, sizeof(zs));
    
    if (inflateInit(&zs) != Z_OK) {
        return "";
    }
    
    zs.next_in = (Bytef*)(str.c_str());
    zs.avail_in = str.size();
    
    char outbuffer[32768];
    std::string outstring;
    
    do {
        zs.next_out = reinterpret_cast<Bytef*>(outbuffer);
        zs.avail_out = sizeof(outbuffer);
        
        if (inflate(&zs, 0) == Z_STREAM_ERROR) {
            inflateEnd(&zs);
            return "";
        }
        
        outstring.append(outbuffer, sizeof(outbuffer) - zs.avail_out);
        
    } while (zs.avail_out == 0);
    
    inflateEnd(&zs);
    
    return outstring;
}

int main() {
    std::string str = "Hello, World!";
    
    // 压缩
    std::string compressed = compress(str);
    std::cout << "Compressed: " << compressed << std::endl;
    
    // 解压缩
    std::string decompressed = decompress(compressed);
    std::cout << "Decompressed: " << decompressed << std::endl;
    
    return 0;
}
Salin selepas log masuk
  1. Penyulitan dan Penyahsulitan Data

Dalam C++, anda boleh menggunakan perpustakaan openssl untuk melaksanakan penyulitan dan penyahsulitan data. Berikut ialah contoh kod:

#include <iostream>
#include <string>
#include <openssl/aes.h>
#include <openssl/rand.h>

std::string encrypt(const std::string& key, const std::string& plain) {
    std::string encrypted;
    AES_KEY aesKey;
    
    if (AES_set_encrypt_key(reinterpret_cast<const unsigned char*>(key.c_str()), 128, &aesKey) < 0) {
        return "";
    }
    
    int len = plain.length();
    
    if (len % 16 != 0) {
        len = (len / 16 + 1) * 16;
    }
    
    unsigned char outbuffer[1024];
    memset(outbuffer, 0, sizeof(outbuffer));
    AES_encrypt(reinterpret_cast<const unsigned char*>(plain.c_str()), outbuffer, &aesKey);
    
    encrypted.assign(reinterpret_cast<char*>(outbuffer), len);
    
    return encrypted;
}

std::string decrypt(const std::string& key, const std::string& encrypted) {
    std::string decrypted;
    AES_KEY aesKey;
    
    if (AES_set_decrypt_key(reinterpret_cast<const unsigned char*>(key.c_str()), 128, &aesKey) < 0) {
        return "";
    }
    
    unsigned char outbuffer[1024];
    memset(outbuffer, 0, sizeof(outbuffer));
    AES_decrypt(reinterpret_cast<const unsigned char*>(encrypted.c_str()), outbuffer, &aesKey);
    
    decrypted.assign(reinterpret_cast<char*>(outbuffer));
    
    return decrypted;
}

int main() {
    std::string key = "1234567890123456";
    std::string plain = "Hello, World!";
    
    // 加密
    std::string encrypted = encrypt(key, plain);
    std::cout << "Encrypted: " << encrypted << std::endl;
    
    // 解密
    std::string decrypted = decrypt(key, encrypted);
    std::cout << "Decrypted: " << decrypted << std::endl;
    
    return 0;
}
Salin selepas log masuk

Artikel ini memperkenalkan beberapa teknik biasa untuk penukaran data dan pengekodan dan penyahkodan dalam C++ dalam pembangunan sistem terbenam, dan menyediakan contoh kod yang berkaitan. Saya harap ia akan membantu pembangun yang terlibat dalam pembangunan sistem terbenam.

Atas ialah kandungan terperinci Kemahiran pelaksanaan fungsi penukaran dan pengekodan dan penyahkodan data C++ dalam pembangunan sistem terbenam. 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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan