resueltos - para que sirve la memoria dinamica en c++
¿Es válido usar std:: string para almacenar datos binarios, para evitar la administración manual de memoria dinámica? (4)
Preste atención a base64_decode
en http://www.adp-gmbh.ch/cpp/common/base64.html
std::string base64_decode(std::string const& encoded_string)
Se supone que la función devuelve la byte array
para indicar datos binarios. Sin embargo, la función está devolviendo std::string
. Mi conjetura es que, el autor está tratando de evitar realizar una asignación de memoria dinámica explícita.
Intento verificar que la salida es correcta.
int main()
{
unsigned char data[3];
data[0] = 0; data[1] = 1; data[2] = 2;
std::string encoded_string = base64_encode(data, 3);
// AAEC
std::cout << encoded_string << std::endl;
std::string decoded_string = base64_decode(encoded_string);
for (int i = 0; i < decoded_string.length(); i++) {
// 0, 1, 2
std::cout << (int)decoded_string.data()[i] << ", ";
}
std::cout << std::endl;
getchar();
}
La salida descodificada es correcta. Solo quiero confirmar, es válido para std::string
para almacenar datos binarios, para evitar la administración manual de la memoria dinámica.
std::string s;
s += (char)0;
// s.length() will return 1.
Necesita una matriz de caracteres (no una cadena) para almacenar los datos binarios. Lo mejor es usar vectores.
No creo que uno deba usar std :: string para el almacenamiento de datos de bytes. El método proporcionado no está diseñado para tratar con datos de bytes y usted se arriesgará, ya que cualquier cambio (u "optimización") en std :: string romperá su código.
Sí, puede almacenar cualquier secuencia de caracteres en una std::string
. Eso incluye cualquier dato binario.
Sí. std :: string puede contener cualquier valor char ( ''/0''
no tiene un significado especial). Sin embargo, no me sorprendería encontrar algunas funciones de C ++ (p. Ej., De bibliotecas externas) que tienen problemas con cadenas con NUL incrustados.
De todos modos, no comprendo lo que obtendrás con un std::string
lugar de std::vector<unsigned char>
que aclararía tus intenciones y ofrecería más garantías (por ejemplo, que todos los bytes están en contiguo, no - memoria compartida para que pueda pasar &x[0]
a alguien que espera un búfer simple para acceso directo).