Преобразуване на десетичен низ в шестнадесетичен низ без съхраняване в число

Имам низ, който има десетична стойност. Трябва да конвертирам това в шестнадесетична десетична стойност. Знам, че низът трябва да се преобразува в цяло число първо с помощта на stoi и след това да се преобразува в шестнадесетичен с помощта на stringstream std::hex

std::string hexString(std::string decimalString)
{
    std::stringstream ss;
    int val = std::stoi(decimalString);
    ss << std::hex << val;
    return ss.str();
}

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


person Arun    schedule 01.02.2018    source източник
comment
Знаете, че е необходимо и питате дали е необходимо?   -  person Yunnosch    schedule 01.02.2018
comment
Не е в стандарта, можете да инвестирате времето си в създаване на свой собствен, но мисля, че вашата функция е повече от добра, ако обслужва вашите нужди.   -  person Blasco    schedule 01.02.2018
comment
Не мисля, че има по-прост начин от преобразуването на низа в десетично число и преобразуването на десетичното число в шестнадесетично. Ще чакам някой да ми докаже, че греша.   -  person R Sahu    schedule 01.02.2018


Отговори (1)


Разбира се, че можете, можете да реализирате преобразуване директно върху std::string, като манипулирате символите от низ като цифри. Все пак ще трябва да приложите умножение и събиране на такива числа и това ще бъде много по-бавно, отколкото да позволите на процесора да го направи.

Като цяло ефективното преобразуване между бази A и B чрез картографиране е възможно само в определени случаи, като най-простият е, когато B е степен на A (или A на B), например ако A=2 и B=4:

1101010010
 3 1 1 0 2

така че 1101010010-base2 става 31102-base4, преобразуването се извършва чрез съпоставяне на двойки от цифри base2 към цифри base4. Обърнете внимание, че това по същество е същото, просто междинното цяло число сега е широко само 2 бита, но поне ширината на междинното не зависи от ширините на входовете.

person Uprooted    schedule 01.02.2018