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.
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; }
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; }
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; }
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; }
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.
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; }
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; }
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!