如何将枚举的十六进制值打印到C++中的字符串
Posted
技术标签:
【中文标题】如何将枚举的十六进制值打印到C++中的字符串【英文标题】:how to print hex value of an enum to a string in 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
【问题讨论】:
en.cppreference.com/w/cpp/io/manip/hex#Example 无法确定枚举常量是用十六进制值还是以其他方式初始化的。因此,以十六进制打印枚举值与以十六进制打印任意变量没有什么不同。 无论您以十进制 (84)、十六进制 (0x54) 还是八进制 (0124) 分配值,该值都将在内部存储相同。您只能选择以不同方式显示此值。 c++ cout hex values?的可能重复 十六进制 56 和十进制 86(以及八进制 126、二进制 01010110 和罗马 LXXXVI...)表示相同的值,唯一的区别在于它们的文本形式。 【参考方案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
【讨论】:
以上是关于如何将枚举的十六进制值打印到C++中的字符串的主要内容,如果未能解决你的问题,请参考以下文章