Как Преобразовать неподписанный символ* в станд.:: строка в C++?

Принятый ответ не будет работать из-за проблемы, описанной здесь https://wpf.2000things.com/2011/04/17/279-adding-a-border-around-an-image-control/

Я решил это таким образом.


    
     
    
   

36
задан harogaston 7 October 2015 в 22:51
поделиться

4 ответа

Вам просто нужно было преобразовать unsigned char в char , так как класс string не имеет конструктора, который принимает unsigned char :

unsigned char* uc;
std::string s( reinterpret_cast< char const* >(uc) ) ;

Однако вам нужно будет использовать аргумент длины в конструкторе, если ваш массив байтов содержит нули, как будто вы этого не сделаете, только часть массива окажется в строка (массив до первого нуля)

size_t len;
unsigned char* uc;
std::string s( reinterpret_cast<char const*>(uc), len ) ;
59
ответ дан 27 November 2019 в 05:44
поделиться

BYTE * , вероятно, является typedef для unsigned char * , но я не могу сказать наверняка. Было бы полезно, если бы вы сказали нам, что такое BYTE .

Если BYTE * является unsigned char *, вы можете преобразовать его в std :: string с помощью конструктора диапазона std :: string, который примет два общих итератора.

const BYTE* str1 = reinterpret_cast<const BYTE*> ("Hello World");
int len = strlen(reinterpret_cast<const char*>(str1));
std::string str2(str1, str1 + len);

При этом вы уверены, что это хорошая идея? Если BYTE равен unsigned char , он может содержать символы, отличные от ASCII, которые могут включать NULL. Это приведет к тому, что strlen будет давать неверную длину.

7
ответ дан 27 November 2019 в 05:44
поделиться

BYTE - это не что иное, как typedef unsigned char BYTE;

Вы можете легко использовать любой из конструкторов ниже

string ( const char * s, size_t n );
string ( const char * s );
2
ответ дан 27 November 2019 в 05:44
поделиться
BYTE *str1 = "Hello World";
std::string str2((char *)str1);  /* construct on the stack */

В качестве альтернативы:

std::string *str3 = new std::string((char *)str1); /* construct on the heap */
cout << &str3;
delete str3;
4
ответ дан 27 November 2019 в 05:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: