如何在C ++中将unsigned char *转换为std :: string?

时间:2009-11-04 12:20:29

标签: c++ bytearray byte

我有unsigned char*,希望将其转换为std::string。你能告诉我最安全的方法吗?

6 个答案:

答案 0 :(得分:53)

你只需要将unsigned char转换为char,因为字符串类没有接受unsigned char的构造函数:

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

但是,如果你的字节数组包含空值,你将需要在构造函数中使用length参数,就好像你不只是部分数组将以字符串结尾(数组直到第一个空)< / p>

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

答案 1 :(得分:6)

BYTE*可能是unsigned char*的typedef,但我不能肯定地说。如果您告诉我们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);

话虽如此,你确定这是一个好主意吗?如果BYTEunsigned char,则它可能包含非ASCII字符,其中可能包含NULL。这将使strlen给出不正确的长度。

答案 2 :(得分:4)

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;

答案 3 :(得分:2)

BYTE只是typedef unsigned char BYTE;

您可以轻松使用以下任何构造函数

string ( const char * s, size_t n );
string ( const char * s );

答案 4 :(得分:1)

这是完整的代码

#include <bits/stdc++.h>

using namespace std;

typedef unsigned char BYTE;

int main() {
  //method 1;
  std::vector<BYTE> data = {'H','E','L','L','O','1','2','3'};
  //string constructor accepts only const char
  std::string s((const char*)&(data[0]), data.size());
  std::cout << s << std::endl;

  //method 2
  std::string s2(data.begin(),data.end());
  std::cout << s2 << std::endl;

  //method 3
  std::string s3(reinterpret_cast<char const*>(&data[0]), data.size()) ;
  std::cout << s3 << std::endl;
 
  return 0;
}

答案 5 :(得分:0)

如果可以访问CryptoPP

可读的十六进制字符串到无符号字符

std::string& hexed = "C23412341324AB";
uint8_t      buffer[64] = {0};
StringSource ssk(hexed, true,
            new HexDecoder(new ArraySink(buffer,sizeof(buffer))));

然后回来

std::string hexed;
uint8_t val[32]  = {0};
StringSource ss(val, sizeof(val), true,new HexEncoder(new StringSink(hexed));
// val == buffer