我如何将整数转换为存储在字符阵列中的十六进制字节

How can I convert an integer to a hex byte stored in a char array?

本文关键字:阵列 字符 字节 十六进制 存储 整数 转换      更新时间:2023-10-16

我目前正在努力存储一个整数,该整数适合一个十六进制字节,作为角色数组中的十六进制值。例如,我的输入将是:

int i = 28;

,输出将是:

char hex[1] = {'x1C'};

最简单的方法是什么?

char hex[1] = {i};

就是这样。

避免警告有关缩小转换的警告,您也可以施放到char

没有"十六进制字节"之类的东西;只有一个字节。当您将其写入源代码中时,它只是"十六进制"。像其他所有值一样,它不会以十六进制或十进制的计算机存储在您的计算机上,而是以二进制。

所以,基础是无关紧要的。您已经有了价值。只需将其放在数组中即可。

这种方式使用std::stringstream将整数转换为字符串及其特殊操纵器来设置基础。例如这样:

std::stringstream sstream;
sstream << std::hex << my_integer;
std::string result = sstream.str();

Use <iomanip>'s std::hex.如果打印,只需将其发送到std::cout,如果不是,请使用std::stringstream

std::stringstream stream;
stream << std::hex << your_int;
std::string result( stream.str() );
You can prepend the first << with << "0x" 

或您想要的任何东西。

其他感兴趣的manips是std::oct (octal)std::dec(返回十进制(。

您可能会遇到的一个问题是,这会产生代表它所需的数字的确切数量。您可以使用setFill并将其设置为解决问题:

stream << std::setfill ('0') << std::setw(sizeof(your_type)*2) 
       << std::hex << your_int;
So finally, I'd suggest such a function:
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();
}