0

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ある16進文字列に変換する方法です\x"\x0a\x15\x00\x00"

前もって感謝します。

4

3 に答える 3

2

多分このプログラムはあなたを助けるでしょう:

#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整数の 16 進数表現を取得することです。

于 2013-09-30T14:08:10.623 に答える
1

このようなもの:

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);
于 2013-09-30T14:17:19.137 に答える