Which of one of these is best suited for managing a character buffer that can be easily converted to std::string and passed to and used ( i.e. read / write ) in C functions
std::vector<unsigned char>
std::vector<char>
char's signedness depends on the compiler.1
It can represent a unsigned char or signed char. Which type is used when representing a string is dependent on the compiler - therefore you should use char for portability, and clarity. If that isn't enough, would the less typing needed when writing char convince you? :)
Again, the compiler thinks strings are of type char *, which can be equivalent to unsigned char * or signed char *. If you're going to be working with strings use std::vector<char>.
1 char is the only type with this behavior.
char is more compatible with strings than unsigned char. String literals are char[] and std::string is actually std::basic_string<char>.
std::string is a typedef for std::basic_string<char>; std::basic_string<> relies on std::char_traits<>, but std::char_traits<> is only specialized for char and wchar_t. So, std::basic_string<> will not portably play nice with unsigned char out of the box (though in practice, it will work just fine with most modern compilers).