Uni*_*orn 36 c++ byte bytearray
我有unsigned char*
,想把它转换成std::string
.你能告诉我最安全的方法吗?
Yac*_*oby 59
您只需要将unsigned char转换为char,因为字符串类没有接受unsigned char的构造函数:
unsigned char* uc;
std::string s( reinterpret_cast< char const* >(uc) ) ;
Run Code Online (Sandbox Code Playgroud)
但是,如果您的字节数组包含空值,则需要在构造函数中使用length参数,就好像您不只是部分数组将以字符串结尾(该数组最多为第一个null)
size_t len;
unsigned char* uc;
std::string s( reinterpret_cast<char const*>(uc), len ) ;
Run Code Online (Sandbox Code Playgroud)
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);
Run Code Online (Sandbox Code Playgroud)
话虽如此,你确定这是一个好主意吗?如果BYTE
是unsigned char
它可能包含非ASCII字符,可以包括NULL.这将使得strlen
长度不正确.
BYTE *str1 = "Hello World";
std::string str2((char *)str1); /* construct on the stack */
Run Code Online (Sandbox Code Playgroud)
或者:
std::string *str3 = new std::string((char *)str1); /* construct on the heap */
cout << &str3;
delete str3;
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
99999 次 |
最近记录: |