C ++ любой гекс на символ - PullRequest
2 голосов
/ 26 июля 2011

Есть ли лучший путь от гекса до символа?

char one = static_cast<char>(0x01);

(спрашивая из-за этого -> C ++ с использованием указателей, ничего не передается )

Также существует ли быстрый способ сделать массив символов из шестнадцатеричных значений (например, 0x12345678 в массив символов)?

Ответы [ 2 ]

7 голосов
/ 26 июля 2011

Вы можете попробовать это:

std::string hexify(unsigned int n)
{
  std::string res;

  do
  {
    res += "0123456789ABCDEF"[n % 16];
    n >>= 4;
  } while(n);

  return std::string(res.rbegin(), res.rend());
}

Кредиты STL для трюка "index to char array".

Также будьте осторожны при печати char s, которые подписаны на некоторых платформах.Если вы хотите, чтобы 128 печатался как 80, а не FFFFFFFF, вы должны запретить его обработку как -1, преобразовав сначала в unsigned char: hexify((unsigned char)(c));

1 голос
/ 26 июля 2011

Что вы намереваетесь хранить в переменной one?

Код, как написано, сохранит символ ASCII 0x01 в one. Это управляющий символ, а не печатный символ. Если вы ищете цифру 1, то вам нужно прямо сказать:

char one = '1';

Хранит фактический символ, а не код ASCII 0x01.

Если вы пытаетесь преобразовать число в строковое представление этого числа, вам нужно использовать один из этих механизмов . Если вместо этого вы пытаетесь обработать 32-разрядное целое число как последовательность из 4 байтов, каждый из которых является символом ASCII, это другой вопрос. Для этого вы можете сделать это:

uint32_t someNumber = 0x12345678;
std::string myString(4, ' ');
myString[0] = static_cast<char>((someNumber >> 24) & 0xFF);
myString[1] = static_cast<char>((someNumber >> 16) & 0xFF);
myString[2] = static_cast<char>((someNumber >> 8) & 0xFF);
myString[3] = static_cast<char>((someNumber) & 0xFF);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...