Я написал простой код для преобразования дробного числа в 24-битное (3 байта, 6 символов) шестнадцатеричное число.
Допустим, если вы введете 0,5, он предоставляет шестнадцатеричное число 0x400000.
0.1 = 0xccccd
0,001 = 0x20c5
Хотя ответы верны, я хотел бы сохранить 6-символьное представление, поэтому я хотел бы, чтобы 0.1 было = 0x0ccccd и
0,001 = 0x0020c5.
Я подумал, что даже если я преобразую шестнадцатеричное число в строку и найду количество нулей для объединения, программа будет немного неуклюжей. Может быть, есть более простой способ достичь того, что я хочу сделать. Я просто не знаю как.
Надеюсь, кто-то может показать мне путь вперед. Программа, которую я написал ниже.
в то время как (истинно) {
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»;
}
#include <iomanip>
int val = 0x20c5;
std::cout << "0x" << std::setw(6) << std::hex << std::setfill('0') << val << '\n';
Если вам просто нужно, чтобы на выходе были первые 0. Если вы хотите сохранить его как строку, вы можете использовать std :: stringstream вместо std :: cout и получить из нее строку.
Других решений пока нет …