Pay attention to base64_decode
in http://www.adp-gmbh.ch/cpp/common/base64.html
std::string base64_decode(std::string const& encoded_string)
The function is suppose to return byte array
to indicate binary data. However, the function is returning std::string
. My guess is that, the author is trying to avoid from perform explicit dynamic memory allocation.
I try to verify the output is correct.
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(); }
The decoded output is correct. Just want to confirm, is it valid to std::string
to hold binary data, to avoid manual dynamic memory management.
std::string s; s += (char)0; // s.length() will return 1.
h functions when you are declaring string with std::string keyword because std::string strings are of basic_string class type and cstring strings are of const char* type. Pros: When dealing exclusively in C++ std:string is the best way to go because of better searching, replacement, and manipulation functions.
While std::string has the size of 24 bytes, it allows strings up to 22 bytes(!!) with no allocation.
Yes, you can store any sequence of char
in a std::string
. That includes any binary data.
Yes. std::string can hold any char value ('\0'
has no special meaning). However I wouldn't be surprised finding some C++ functions (e.g. from external libraries) having problems with strings with embedded NULs.
Anyway I don't understand what you are going to gain with an std::string
instead of std::vector<unsigned char>
that would make your intentions more clear and that offers more guarantees (e.g. that all the bytes are in contiguous not-shared memory so that you can pass &x[0]
to someone expecting a plain buffer for direct access).
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With