【问题标题】:int to Hex string (C++)int 到十六进制字符串 (C++)
【发布时间】:2013-09-30 14:01:04
【问题描述】:

我已经对如何将 int 转换为 Hex 字符串进行了一些研究,并找到了 answer,但是我需要的有点不同,如下面的代码所示:

    int addr = 5386; // 

    std::string buffer = "contains 0xCCCCCCCC as hex (non ASCII in the string)";
    size_t idx = 0;
    idx = buffer.find("\xCC\xCC\xCC\xCC", idx);
    if (idx != string::npos) buffer.replace(idx, 4, XXX); // here i want to put the addr variable but as 0x0000150A 

我需要一种将addr 变量转换为在"\x0a\x15\x00\x00" 等字节之间包含\x 的十六进制字符串的方法

提前致谢。

【问题讨论】:

标签: c++ string hex


【解决方案1】:

也许这个程序会帮助你:

#include <sstream>
#include <iomanip>
#include <iostream>

int main(int argc, char const *argv[])
{
    int a = 5386;

    std::ostringstream vStream;
    for(std::size_t i = 0 ; i < 4 ; ++i)
        vStream << "\\x"
                << std::right << std::setfill('0') << std::setw(2) << std::hex
                << ((a >> i*4) & 0xFF);

    std::cout << vStream.str() << std::endl;

    return 0;
}

我不确定我是否确实遇到了您的问题,但我了解您希望将 int 转换为格式为以下格式的字符串:“\xAA\xAA\xAA\xAA”。

它使用std::rightstd::setfill('0')std::setw(2) 将“2”的输出强制为“02”。 std::hex是获取整数的十六进制表示。

【讨论】:

    【解决方案2】:

    您可能希望将addr 视为char*,但您会遇到字节序问题。

    您可以通过以下方式手动完成这项工作:

    unsigned int addr = 5386 // 0x0000150A
    
    char addrAsHex[5] = {(addr >> 24) & 0xFF, (addr >> 16) & 0xFF, (addr >> 8) & 0xFF, addr & 0xFF, 0};
    
    // ...
    buffer.replace(idx, 4, addrAsHex);
    

    【讨论】:

      【解决方案3】:

      类似这样的:

      char buf[20];
      uint32_t val;
      sprintf(buf, "\\x%02x\\x%02x\\x%02x\\x%02x", 
             (val >> 24), (uint8_t)(val >> 16), (uint8_t)(val >> 8), (uint8_t)val);
      

      【讨论】:

      • 别忘了双斜线。
      猜你喜欢
      • 1970-01-01
      • 2012-04-27
      • 2013-02-01
      • 1970-01-01
      • 2011-11-12
      • 2010-10-04
      • 2012-01-24
      • 2019-11-16
      • 1970-01-01
      相关资源
      最近更新 更多