【问题标题】:C++ any hex to charC ++任何十六进制到char
【发布时间】:2011-10-13 00:45:57
【问题描述】:

有没有更好的从十六进制到字符的方法?

char one = static_cast<char>(0x01);

(因为这个而问--> C++ using pointers, nothing is passed

还有一种快速的方法可以用十六进制值创建一个 char 数组(例如 0x12345678 到一个 char 数组)?

【问题讨论】:

  • “更好”如“实际有效的东西”?
  • 据我所知这是有效的(查看我提供的链接)

标签: c++ hex


【解决方案1】:

你可以试试这个:

std::string hexify(unsigned int n)
{
  std::string res;

  do
  {
    res += "0123456789ABCDEF"[n % 16];
    n >>= 4;
  } while(n);

  return std::string(res.rbegin(), res.rend());
}

感谢 STL 的“索引到 char 数组”技巧。

打印在某些平台上签名的chars 时也要小心。如果您希望将128 打印为80 而不是FFFFFFFF,则必须先将其转换为无符号字符,以防止它被视为-1hexify((unsigned char)(c));

【讨论】:

  • 第一个呢?只有一个字符?
  • 当然:char c; std::string result = hexify(c);.
  • 如果n 为0怎么办?在这种情况下,您可能不想要一个空字符串。也许do { } while(n) 会是更好的选择。
  • n &gt;&gt; 4 实际上什么也没做 ;-)
【解决方案2】:

你打算在变量one中存储什么?

编写的代码会将 ASCII 字符 0x01 存储到 one 中。这是一个控制字符,而不是可打印字符。如果您正在寻找 digit 1,那么您需要明确地说出来:

char one = '1';

存储实际字符,而不是 ASCII 码 0x01

如果您尝试将数字转换为该数字的字符串表示形式,则需要使用one of these mechanisms。相反,如果您尝试将 32 位整数视为 4 个字节的序列,每个字节都是一个 ASCII 字符,那就是另一回事了。为此,您可以这样做:

uint32_t someNumber = 0x12345678;
std::string myString(4, ' ');
myString[0] = static_cast<char>((someNumber >> 24) & 0xFF);
myString[1] = static_cast<char>((someNumber >> 16) & 0xFF);
myString[2] = static_cast<char>((someNumber >> 8) & 0xFF);
myString[3] = static_cast<char>((someNumber) & 0xFF);

【讨论】:

  • 我知道我想要什么,你应该看看我提供的链接
  • @whyRegister:提供一个链接来解释你如何对某个问题感兴趣是合理的,但你仍然应该让这个问题独立有意义。所以问题并不意味着在回答之前需要寻宝。事实上,这是一个措辞非常模糊的混乱。
  • @Nicol: +1,但std::string 没有来自单独长度值的构造函数......你需要例如myString(4, ' ')。无论如何,std::ostringstreamstd::hex 应该被视为最适合初学者的方法......
猜你喜欢
  • 2022-12-20
  • 2011-10-28
  • 2013-06-02
  • 1970-01-01
  • 2011-12-09
  • 2011-06-01
  • 2022-06-11
  • 1970-01-01
  • 2014-04-18
相关资源
最近更新 更多