C中的整数到十六进制字符串

新手上路,请多包涵

如何在 C++ 中将整数转换为十六进制字符串?

我可以找到一些方法来做到这一点,但它们似乎主要针对 C。在 C++ 中似乎没有本地方法可以做到这一点。这是一个非常简单的问题;我有一个 int 我想将其转换为十六进制字符串以供以后打印。

原文由 kryptobs2000 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 916
2 个回答

使用 <iomanip>std::hex 。如果您打印,只需将其发送到 std::cout ,如果没有,则使用 std::stringstream

 std::stringstream stream;
stream << std::hex << your_int;
std::string result( stream.str() );

你可以在第一个 << 前面加上 << "0x" 或者你喜欢的任何东西。

其他感兴趣的操作是 std::oct (八进制)和 std::dec (回到十进制)。

您可能遇到的一个问题是,这会产生表示它所需的确切数字数量。您可以使用 setfillsetw 来规避问题:

 stream << std::setfill ('0') << std::setw(sizeof(your_type)*2)
       << std::hex << your_int;

所以最后,我建议这样一个功能:

 template< typename T >
std::string int_to_hex( T i )
{
  std::stringstream stream;
  stream << "0x"
         << std::setfill ('0') << std::setw(sizeof(T)*2)
         << std::hex << i;
  return stream.str();
}

原文由 Kornel Kisielewicz 发布,翻译遵循 CC BY-SA 3.0 许可协议

使用变量:

 char selA[12];

然后:

 snprintf(selA, 12, "SELA;0x%X;", 85);

将导致 selA 包含字符串 SELA;0x55;

请注意,围绕 55 的内容只是与我的应用程序中使用的串行协议相关的细节。

原文由 Paul Ratazzi 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题