【问题标题】:Converting from C++ string to unsigned char* and back从 C++ 字符串转换为 unsigned char* 并返回
【发布时间】:2016-02-05 00:46:06
【问题描述】:

将 std::string 转换为 unsigned char* 并返回的代码是什么?

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

strstr1 必须相同且不损失精度。

【问题讨论】:

  • unsigned char* ?您确定 std::string 是适合您工作的工具吗?
  • 你为什么要这样做?
  • 您确定不要unsigned char const*
  • 你想要unsigned char 做什么?存储二进制数据?也许你真的想要std::vector<std::uint8_t>

标签: c++ string casting unsigned-char


【解决方案1】:
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*

无符号字符*:

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

使用向量而不是原始指针:

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); });

【讨论】:

  • 抛弃.c_str()结果的常量是相当不好的。
  • 我知道;我只是在回答“将 std::string 转换为 unsigned char* 的代码是什么”这个问题。我通常对这个问题的回答是“使用向量”。
猜你喜欢
  • 1970-01-01
  • 2018-03-27
  • 2018-09-18
  • 1970-01-01
  • 1970-01-01
  • 2012-01-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多