C Data conversion and encoding and decoding function implementation skills in embedded system development
In embedded system development, data conversion and encoding and decoding are very important functions one. Whether it is converting data from one format to another, or encoding and decoding data for transmission and storage, effective techniques and algorithms are required to achieve it. As a programming language widely used in embedded system development, C provides a wealth of libraries and tools to support the implementation of data conversion and encoding and decoding functions.
Below, we will introduce some common techniques for implementing data conversion and encoding and decoding in C, and attach corresponding code examples.
1. Data type conversion
In embedded system development, it is often necessary to convert different data types. For example, convert integer to string, convert string to integer, convert float to integer, etc. C provides libraries to support these conversion operations.
To convert integers to strings, you can use the ostringstream class. Here is a sample code:
#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; }
To convert a string to an integer, you can use the istringstream class. The following is a sample code:
#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; }
To convert floating point numbers to integers, you can use the type cast operator. Here is a sample code:
#include <iostream> int main() { double num = 3.14; int integer = static_cast<int>(num); std::cout << "Double to integer: " << integer << std::endl; return 0; }
To convert an integer to a floating point number, you can use the type cast operator. The following is a sample code:
#include <iostream> int main() { int integer = 3; double num = static_cast<double>(integer); std::cout << "Integer to double: " << num << std::endl; return 0; }
2. Encoding and decoding
In embedded systems, it is often necessary to encode and decode data for transmission and storage. For example, compress and decompress data, encrypt and decrypt data, and so on. C provides some libraries to support these encoding and decoding operations.
In C, you can use the zlib library to achieve data compression and decompression. The following is a sample code:
#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; }
In C, you can use the openssl library to implement data encryption and decryption. The following is a sample code:
#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; }
This article introduces some common techniques of data conversion and encoding and decoding in C in embedded system development, and provides relevant code examples. I hope it will be helpful to developers who are engaged in embedded system development.
The above is the detailed content of C++ data conversion and encoding and decoding function implementation skills in embedded system development. For more information, please follow other related articles on the PHP Chinese website!