Heim  >  Artikel  >  Backend-Entwicklung  >  C++-Datenkonvertierung sowie Codierungs- und Decodierungsfunktionen zur Implementierung von Fähigkeiten in der Entwicklung eingebetteter Systeme

C++-Datenkonvertierung sowie Codierungs- und Decodierungsfunktionen zur Implementierung von Fähigkeiten in der Entwicklung eingebetteter Systeme

WBOY
WBOYOriginal
2023-08-26 17:24:241105Durchsuche

C++-Datenkonvertierung sowie Codierungs- und Decodierungsfunktionen zur Implementierung von Fähigkeiten in der Entwicklung eingebetteter Systeme

C++-Datenkonvertierung sowie Kodierungs- und Dekodierungsfunktionen in der Entwicklung eingebetteter Systeme

In der Entwicklung eingebetteter Systeme sind Datenkonvertierung sowie Kodierung und Dekodierung eine der sehr wichtigen Funktionen. Ob es darum geht, Daten von einem Format in ein anderes zu konvertieren oder Daten für die Übertragung und Speicherung zu kodieren und zu dekodieren, dafür sind effektive Techniken und Algorithmen erforderlich. Als Programmiersprache, die in der Entwicklung eingebetteter Systeme weit verbreitet ist, bietet C++ eine Fülle von Bibliotheken und Tools zur Unterstützung der Implementierung von Datenkonvertierungs- sowie Kodierungs- und Dekodierungsfunktionen.

Im Folgenden stellen wir einige gängige Techniken zur Implementierung der Datenkonvertierung sowie Kodierung und Dekodierung in C++ vor und fügen entsprechende Codebeispiele bei.

1. Datentypkonvertierung

In der Entwicklung eingebetteter Systeme ist es häufig erforderlich, verschiedene Datentypen zu konvertieren. Konvertieren Sie beispielsweise eine Ganzzahl in eine Zeichenfolge, eine Zeichenfolge in eine Ganzzahl, eine Gleitkommazahl in eine Ganzzahl usw. C++ stellt einige Bibliotheken zur Unterstützung dieser Konvertierungsvorgänge bereit.

  1. Konvertierung von Ganzzahlen und Strings

Um Ganzzahlen in Strings zu konvertieren, können Sie die Klasse ostringstream verwenden. Hier ist ein Beispielcode:

#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;
}

Um einen String in eine Ganzzahl umzuwandeln, können Sie die Klasse istringstream verwenden. Hier ist ein Beispielcode:

#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;
}
  1. Konvertierung von Gleitkommazahlen in Ganzzahlen

Um Gleitkommazahlen in Ganzzahlen umzuwandeln, können Sie den Typumwandlungsoperator verwenden. Hier ist ein Beispielcode:

#include <iostream>

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

    return 0;
}

Um eine Ganzzahl in eine Gleitkommazahl umzuwandeln, können Sie den Typumwandlungsoperator verwenden. Das Folgende ist ein Beispielcode:

#include <iostream>

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

    return 0;
}

2. Kodierung und Dekodierung

In eingebetteten Systemen ist es häufig erforderlich, Daten für die Übertragung und Speicherung zu kodieren und zu dekodieren. Komprimieren und dekomprimieren Sie beispielsweise Daten, verschlüsseln und entschlüsseln Sie Daten usw. C++ stellt einige Bibliotheken zur Unterstützung dieser Kodierungs- und Dekodierungsvorgänge bereit.

  1. Datenkomprimierung und -dekomprimierung

In C++ können Sie die zlib-Bibliothek verwenden, um Datenkomprimierung und -dekomprimierung zu erreichen. Hier ist ein Beispielcode:

#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;
}
  1. Datenverschlüsselung und -entschlüsselung

In C++ können Sie die OpenSSL-Bibliothek verwenden, um Datenverschlüsselung und -entschlüsselung zu implementieren. Das Folgende ist ein Beispielcode:

#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;
}

Dieser Artikel stellt einige gängige Techniken zur Datenkonvertierung sowie Kodierung und Dekodierung in C++ in der Entwicklung eingebetteter Systeme vor und stellt relevante Codebeispiele bereit. Ich hoffe, dass es für Entwickler hilfreich sein wird, die sich mit der Entwicklung eingebetteter Systeme beschäftigen.

Das obige ist der detaillierte Inhalt vonC++-Datenkonvertierung sowie Codierungs- und Decodierungsfunktionen zur Implementierung von Fähigkeiten in der Entwicklung eingebetteter Systeme. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn