繁体   English   中英

在无符号字符的 std::vector 处存储 int 的十六进制表示

[英]Storing hexadecimal representation of int at std::vector of unsigned char

在这段代码中:

  vector<unsigned char> result;
  int n;
  unsigned char c;

  c = (n >> 24) & 0xFF;
  result.push_back(c);
  c = (n >> 16) & 0xFF;
  result.push_back(c);
  c = (n >> 8) & 0xFF;
  result.push_back(c);
  c = n & 0xFF;
  result.push_back(c);

我想要,而不是添加一个单个字节到向量( c ),添加 integer n的十六进制表示的每个数字(如FF之类的0xFF )。

任何人都可以提示如何做到这一点?

更新

我将我的代码更新为此,它适用于除 0 和 1 之外的大多数值(十六进制表示保留一位数字和一个空格:“0”和“1”)。

  BYTE c;

  vector<BYTE> v_version;
  c = (version >> 24) & 0xFF;
  v_version.push_back(c);
  c = (version >> 16) & 0xFF;
  v_version.push_back(c);
  c = (version >> 8) & 0xFF;
  v_version.push_back(c);
  c = version & 0xFF;
  v_version.push_back(c);

  for (auto c: v_version)
  {
    ostringstream oss;
    oss << hex << static_cast<int>(c);
    result.push_back( oss.str()[0] );
    result.push_back( oss.str()[1] );
  }

n未初始化,所以首先要处理好它。

根据您的最终目标,最好的解决方案不是存储十六进制数字,而是保留当前的二进制表示并以十六进制打印。 为此,您需要std::hex和 integer 演员表:

std::cout << std::hex << std::setw(2) << std::setfill('0');
std::cout << static_cast<unsigned>(c);

如果您想存储结果而不是打印它,您可以使用ostringstream来完成,就像您的示例中一样。 但我强烈建议std::stringstd::vector<char> 尽管它的名字unsigned char不应该与字符一起使用。 如果您有像这里这样的字符,则基础类型应该是char

  • 使用char字符
  • 对原始 memory(字节)使用unsigned char
  • 不要使用signed char

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM