2015-11-04 2 views
1

Quel serait le code pour convertir une chaîne std :: en char * non signé et en retour?Conversion de chaîne C++ en char * et retour non signés

str = "1234567891234567" 
unsigned char* unsignedStr = ConvertStrToUnsignedCharPointer(str); 
str1 = ConvertUnsignedCharToStr(unsignedStr); 

str et str1 doit être le même sans perte de précision.

+0

'unsigned char *'? Êtes-vous sûr que 'std :: string' est le bon outil pour votre travail? –

+0

Pourquoi faites-vous cela? – NathanOliver

+2

Etes-vous sûr de ne pas vouloir 'unsigned char const *'? –

Répondre

2
auto str1 = std::string{"1234567891234567"}; // start with string 
auto chrs = str.c_str(); // get constant char* from string 
auto str2 = std::string{ chrs }; // make string from char* 

unsigned char *:

auto uchrs = reinterpret_cast<unsigned char*>(const_cast<char*>(chrs)); 

En utilisant des vecteurs au lieu des pointeurs premières:

using namespace std; 

auto str1 = string{"1234567891234567"}; 
vector<char> chars{ begin(str1), end(str1) }; 

vector<unsigned char> uchars; 
transform(begin(str1), end(str1), back_inserter(uchars), 
    [](char c) { return reinterpret_cast<unsigned char>(c); }); 
+0

L'élimination de la constance du résultat '.c_str()' est plutôt mauvaise. –

+0

Je sais; Je répondais simplement à la question "Quel serait le code pour convertir un std :: string en unsigned char *". Ma réponse habituelle à cette question est "utiliser des vecteurs". – utnapistim