【问题标题】:C++ convert string of hex into char * of hexC ++将十六进制字符串转换为十六进制字符*
【发布时间】:2018-01-31 14:26:57
【问题描述】:

我真的是高高在上。我觉得我好像错过了一些非常简单的东西。

哦,好吧,就这样吧:

string x = "1234";

string y = "\x12\x34";

我想把 x 变成 y。

我正在使用一个 c 库,它只接受 y,但 x 不起作用。

我使用 openssl/sha.h 库创建十六进制字符串,我想像 y 一样传递它们。

这必须是可能的,我只是错过了一些东西。

【问题讨论】:

  • 到目前为止您尝试过什么?您希望我们为您编写代码吗?你有没有尝试过但失败了?
  • 首先请明确说明你的语言是C还是C++。
  • 这听起来像XY Problem。我怀疑 C 库是否只接受 "\x12\x34" 形式的字符串。请edit您的问题并告诉我们更多关于那个 C 库的信息。
  • 如果是“234”,你想要什么? IE。字符串中的奇数个字符。
  • 是什么阻止了您将 X 逐个字符复制到 Y 字符,每隔一个字符插入一个额外的 \x

标签: c++


【解决方案1】:

上了一些irc频道,终于得到了一些帮助:

char nibble(char c) {
  if (c >= '0' && c <= '9')
   return c - '0';
  return 10 + (c - 'a');
}

string stringToHex(string s) {
  string o;
  for (size_t i=0 ; i<s.size() ; i+=2){
    char c = (nibble(s[i]) << 4) | nibble(s[i+1]);
    o.push_back(c);
  }
  return o;
}



   string s = "1234";
   string h = "\x12\x34";
   string o = stringToHex(s);
   cout << "s " << s << endl;
   cout << "h " << h << endl;
   cout << "o " << o << endl;
   cout << "o == h " << (o == h) << endl;

【讨论】:

    猜你喜欢
    • 2018-01-22
    • 2017-08-12
    • 1970-01-01
    • 1970-01-01
    • 2020-11-07
    • 2019-07-27
    • 2013-02-07
    • 1970-01-01
    相关资源
    最近更新 更多