Как мне преобразовать / отобразить тип данных в байтах или что-то еще?Как отладчик в MemoryViewer - PullRequest
0 голосов
/ 03 февраля 2019

Хорошо, я не могу найти хороший способ задать этот вопрос, чтобы гугл мне не помогал (мой английский отстой).

И, пожалуйста, не приходят с простыми ответами на преобразование символов в шестнадцатеричные.

Если есть какая-либо ссылка на тот же вопрос, это также поможет.

У меня есть следующий пример.

template <typename t>
std::string ByteHexDisplay(t variable) {

  return "";
}


int main()
{
    char value_char = 'A';
    int value_int = 5453;
    char question1[] = "What is your name? ";  


    ByteHexDisplay(value_char);     //returns  41 #picture1

    ByteHexDisplay(value_int);      //returns 4d 15 00 00 #picture2

    ByteHexDisplay(question1);      //returns 57 68 61 74 20 69 73 20 79 6f 75 72 20 6e 61 6d 65 3f 20 00 #picture3



}

Я хочу, чтобы в памяти был напечатан представительный байт, как это делает отладчик,Есть ли хороший способ?

Картинки отладчика дампа памяти

value_char

value_int

question1

1 Ответ

0 голосов
/ 03 февраля 2019

Вы можете напечатать значение в виде шестнадцатеричного числа с помощью std::cout, используя std::hex:

std::cout << std::hex << 3735928559 << std::endl;

Чтобы просмотреть побайтовый элемент целиком, разделенный пробелами, вы можетемаска и смещение.Если T является типом (или универсальным) var, это будет работать:

std::size_t len = sizeof T * 8;
while(len > 0)
{
    std::cout << std::hex << (var & 0xFF) << " ";
    var >>= 8;
    len -= 8;
}

Это предполагает, что байт в вашей системе составляет 8 бит, но в 99% случаев это довольно безопаснопредположение сделать.

...