【问题标题】:convert unsigned char* to std::string将 unsigned char* 转换为 std::string
【发布时间】:2013-07-18 18:35:17
【问题描述】:

我在类型转换方面有点差。我在xmlChar* 中有一个字符串(即无符号字符*),我想将此无符号字符转换为std::string 类型。

xmlChar* name = "Some data";

我已尽力进行类型转换,但我找不到转换它的方法。

【问题讨论】:

  • String or std::string? What is String, if you don't mean std::string`?
  • 对不起@Mats Petersson,顺便说一句,它的 std::string
  • 我可以看到人们可能想要将xmlChar 声明为unsigned char 的原因。遗憾的是,它不适用于任何标准库:strlen()std::stringrequire char。因此,如果您有任何影响力,请更改此设置。 (并且使用 char 的 XML 仍然比使用签名的 char 的 Latin-1 少。)

标签: c++ casting unsigned tizen


【解决方案1】:
std::string sName(reinterpret_cast<char*>(name));

reinterpret_cast&lt;char*&gt;(name) 以不安全的方式从 unsigned char* 转换为 char*,但这是应该在这里使用的方式。然后调用std::string的普通构造函数。

你也可以使用 C 风格(不推荐):

std::string sName((char*) name);

【讨论】:

  • 我发现在某些情况下,重新解释演员表最后会产生一些垃圾字符。由于它们很容易被截断,所以没有深入调查,但我想我会提到它,以防我不是一个人。
  • 不孤单,我也遇到过
  • 您可能会看到垃圾,因为您的 unsigned char 数组不以空终止符结尾(或者不以您认为的结尾)。通常,仅将类型转换为字符串类型而不考虑 NUL 是危险的,如果您的代码与 OP 的示例有任何不同(字符串 literals 已经具有空终止符),您应该仔细考虑这一点/跨度>
  • 根据这个答案:stackoverflow.com/a/1673536/3305789 如果您事先知道字符串的大小,似乎可以避免一些问题:std::string sName(reinterpret_cast(name), name_len );
猜你喜欢
  • 2011-07-23
  • 2012-11-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-11
  • 2014-02-19
相关资源
最近更新 更多