Преобразование целого числа в эквивалент 0x (Hex)

У меня целочисленный ввод 1991. Как преобразовать ввод в 0x1991 вместо 7C7? Я уже написал код для преобразования шестнадцатеричного в десятичный (ответ будет 6545)

int ui = 0x202;
int BCD(int value) //Converting 0xhex to decimal 
{
    int result = 0;
    result <<= 4;
    result |= ui % 10;
    ui /= 10;

    return value;
}

c bcd
person Community    schedule 23.11.2016    source источник
comment
Знаете ли вы о strtol?   -  person Weather Vane    schedule 24.11.2016
comment
Если комментарий @WeatherVane вам не поможет, включите минимальный полный проверяемый пример (stackoverflow.com/help/mcve), включая подсказка, что именно вы ожидаете от кода.   -  person Bodo Thiesen    schedule 24.11.2016
comment
Чтобы преобразовать десятичное число в двоично-десятичное, начните с нулевого результата и множителя 1. В цикле разделите десятичное значение на десять, но сначала возьмите остаток. Умножьте остаток на множитель и прибавьте к результату. Умножьте множитель на 16. Повторяйте цикл, пока десятичное значение больше нуля. Чтобы преобразовать из BCD в десятичное, вы делаете то же самое, за исключением того, что вы делите значение BCD на 16 и умножаете множитель на 10.   -  person Nominal Animal    schedule 24.11.2016
comment
stackoverflow.com/questions/1408361/   -  person M.M    schedule 24.11.2016
comment
@M.M, твоя ссылка помогает :) Большое спасибо.   -  person    schedule 24.11.2016


Ответы (2)


Вы используете ui в качестве входных данных и сохраняете результат в result, но затем возвращаете value; вы должны использовать value в качестве входных данных и возвращать result.

person Scott Hunter    schedule 23.11.2016
comment
Код предназначен для преобразования чисел на основе 0x, например, BCD(0x1991), что даст вам ответ 6545 . Однако я понятия не имею, как преобразовать 1991 в 0x1991. - person ; 24.11.2016
comment
@xTiraMissU: Вы спрашивали не об этом, даже если это то, о чем вы хотели спросить. Тем не менее, то, что я написал, все еще применимо. - person Scott Hunter; 24.11.2016
comment
Спасибо. Я это уже исправил :) Спасибо за исправление моих ошибок - person ; 24.11.2016

Создайте строку с префиксом 0x, а затем отсканируйте ее.

int var, value = 1991;
char tmp[100];
sprintf(tmp, "0x%d", value);
if (sscanf(tmp, "%i", &var) != 1) /* error */;
printf("%d ==> %s ==> %d\n", value, tmp, var);
person pmg    schedule 23.11.2016