[英]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.