[英]int to Hex string (C++)
我已经对如何将int转换为Hex字符串进行了一些研究,并找到了答案 ,但是我所需要的有点不同,如以下代码所示:
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
提前致谢。
也许这个程序可以帮助您:
#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::right
, std::setfill('0')
和std::setw(2)
强制将输出“ 2”设置为“ 02”。 std::hex
用于获取整数的十六进制表示形式。
像这样:
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);
您可能希望将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);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.