конкатенация шестнадцатеричного числа с нулями

Я написал простой код для преобразования дробного числа в 24-битное (3 байта, 6 символов) шестнадцатеричное число.

Допустим, если вы введете 0,5, он предоставляет шестнадцатеричное число 0x400000.
0.1 = 0xccccd
0,001 = 0x20c5
Хотя ответы верны, я хотел бы сохранить 6-символьное представление, поэтому я хотел бы, чтобы 0.1 было = 0x0ccccd и
0,001 = 0x0020c5.

  1. Я подумал, что одним из возможных методов будет преобразование шестнадцатеричного результата в строку, а затем использование strlen для проверки количества цифр и последующее объединение результата с соответствующими нулями. У меня есть проблема с этим методом, я не уверен, как сохранить шестнадцатеричный результат в переменной.
  2. Я подумал, что даже если я преобразую шестнадцатеричное число в строку и найду количество нулей для объединения, программа будет немного неуклюжей. Может быть, есть более простой способ достичь того, что я хочу сделать. Я просто не знаю как.
    Надеюсь, кто-то может показать мне путь вперед. Программа, которую я написал ниже.

    в то время как (истинно) {
    float frac_no;
    станд :: соиЬ << «Введите дробное число (0-1) или нажмите 0 для выхода:»;
    std :: cin >> frac_no;
    если (! frac_no) {
    перерыв;
    }

    const int max_limit_24 = exp2 (23); // Максимальное значение 0x7FFFFF (1.0)

    float inter_hex;

    inter_hex = round (max_limit_24 * frac_no);
    int int_inter_hex = int (inter_hex);
    станд :: соиЬ << станд :: шестигранной << «0x» << int_inter_hex << «\ n»;

    }

0

Решение

#include <iomanip>
int val = 0x20c5;
std::cout << "0x" << std::setw(6) << std::hex << std::setfill('0') << val << '\n';

Если вам просто нужно, чтобы на выходе были первые 0. Если вы хотите сохранить его как строку, вы можете использовать std :: stringstream вместо std :: cout и получить из нее строку.

0

Другие решения

Других решений пока нет …