Как я сказал в комментариях, не делайте такого рода вещи, если только вы не знаете, что делаете (чего не делали).
Запись в буфер памяти:
std::string lat = "lat->";
double latitude = 13.123456;
std::vector<unsigned char> result(lat.length() + sizeof(latitude));
std::cout << "copying to the vector" << std::endl;
std::memcpy(result.data(), &latitude, sizeof(latitude)); // add double
std::memcpy(result.data()+sizeof(latitude), lat.data(), lat.size()); // add raw string data
std::cout << "copied to the vector\n" << std::endl;
Обратите внимание, что указатель назначения, переданный на memcpy
, отличается для двух вызовов, каждый раз указывая на память, которая ранее не использовалась.
При чтении строки с помощью memcpy
требуется осторожность:
double d;
std::string value;
std::memcpy(&d, result.data(), sizeof(latitude)); // copy back the bytes of the double
value.resize(lat.length());
std::memcpy(value.data(),result.data()+sizeof(latitude), value.data(), lat.size());
Вы видите, что нам нужно знать количество символов (lat.size()
), прежде чем мы сможем скопировать их из буфера.Это делает весь подход сомнительным в лучшем случае.Я настоятельно рекомендую, чтобы после понимания этого примера вы больше не занимались подобными вещами.