簡體   English   中英

int轉換為十六進制字符串(C ++)

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM