简体   繁体   中英

Convert unsigned char to string then again to unsigned char

I want to convert:

  1. A simple unsigned char [] to string

  2. Then again to unsigned char

This is my code:

// This is the original char
unsigned char data[14] = {
    0x68,0x65,0x6c,0x6c,0x6f,0x20,0x63,0x6f,0x6d,0x70,0x75,0x74,0x65,0x72,
};

// This convert to string
string str(data, data + sizeof data / sizeof data[0]);

// And this convert to unsigned char again
unsigned char* val = new unsigned char[str.length() + 1];
strcpy_s(reinterpret_cast<char *>(val), str.length()+1 , str.c_str());

The problem is with the 2nd part, It wont convert the string to unsigned char like it was before. I think this img from locals in debug helps

One way:

#include <string>
#include <utility>
#include <cstring>
#include <memory>
#include <cassert>

int main()
{
    // This is the original char
    unsigned char data[14] = {
        0x68,0x65,0x6c,0x6c,0x6f,0x20,0x63,0x6f,0x6d,0x70,0x75,0x74,0x65,0x72,
    };

    // This convert to string
    std::string str(std::begin(data), std::end(data));

    // And this convert to unsigned char again
    auto size = std::size_t(str.length());
    auto new_data = std::make_unique<unsigned char[]>(size);
    std::memcpy(new_data.get(), str.data(), size);

    // check
    for (auto f1 = data, f2 = new_data.get(), e1 = f1 + size ; f1 != e1 ; ++f1, ++f2)
    {
        assert(*f1 == *f2);
    }
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM