【问题标题】:how to print hex value of an enum to a string in c++如何将枚举的十六进制值打印到C++中的字符串
【发布时间】:2018-12-19 14:38:05
【问题描述】:

如何将下面enum 的十六进制值转换为字符串并将其存储在变量中。

enum {
    a      = 0x54,
    b,
    c
};

例如

auto value = a;
std::string value_as_hex = to_hex(a);

我怎么写to_hex

【问题讨论】:

  • 无法确定枚举常量是用十六进制值还是以其他方式初始化的。因此,以十六进制打印枚举值与以十六进制打印任意变量没有什么不同。
  • 无论您以十进制 (84)、十六进制 (0x54) 还是八进制 (0124) 分配值,该值都将在内部存储相同。您只能选择以不同方式显示此值。
  • c++ cout hex values?的可能重复
  • 十六进制 56 和十进制 86(以及八进制 126、二进制 01010110 和罗马 LXXXVI...)表示相同的值,唯一的区别在于它们的文本形式。

标签: c++


【解决方案1】:

如果要打印枚举的十六进制值,可以使用 printf 和 %x 占位符。例如

#include <cstdio>

enum Foo {
    a      = 0x54,
    b      = 0xA6,
    c      = 0xFF
};

int main() {
    Foo e;

    e = a;
    printf("%x\n",e);

    e = b;
    printf("%x\n",e);

    e = c;
    printf("%x\n",e);

}

程序的输出是

54
a6
ff

【讨论】:

  • 如何将其存储(十六进制值)在变量中以供进一步使用?
  • e 是一个变量。当我写e = a 时,枚举a 的值存储在变量e 中。然后,您可以稍后使用 e。请理解您不存储“十六进制”值。当您写a = 0x54 时,它与写a =84 相同。计算机只有一种存储方式。以后你想用这个号码做什么?
【解决方案2】:

下面的解决方案怎么样?

std::ostringstream str;
str << std::hex << a;
auto x = str.str();

【讨论】:

    【解决方案3】:

    您可以编写 to_hex 函数,使用字符串流和 IO 操作将值的十六进制表示形式存储在字符串中:

    #include <iostream>
    #include <sstream>
    
    std::string to_hex(const unsigned a) {
        std::stringstream ss;
        ss << "0x" << std::hex << a;
        return ss.str();
    }
    
    int main() {
        unsigned value = 0x1234;
        std::string value_as_hex = to_hex(value);
    
        std::cout << value_as_hex << "\n";
    }
    

    输出:

    0x1234
    

    【讨论】:

      猜你喜欢
      • 2011-01-20
      • 2023-03-18
      • 2014-10-07
      • 1970-01-01
      • 1970-01-01
      • 2019-07-27
      • 2011-12-25
      • 2013-05-21
      • 1970-01-01
      相关资源
      最近更新 更多