Проблема BCD Calculator - PullRequest
       14

Проблема BCD Calculator

0 голосов
/ 07 октября 2011

Я конвертирую гекс 0xE0 в BCD.Когда я делаю это, я получаю обратно 64. Я знаю, что это совершенно неправильно, и, возможно, это что-то в моем коде C ++, но 64 просто не звучит правильно.Есть идеи?0xE0 особый случай?(0xE0 - это 224 в десятичном формате.)

Вот часть моего кода:

unsigned char Hex2BCD(unsigned char param)
{   unsigned char lo;
    unsigned char hi;
    unsigned char val;
    unsigned char buf[10];

hi = param/ 10;
lo = param- (hi * 10);

val= (hi << 4) + lo;
return val;
}

1 Ответ

1 голос
/ 07 октября 2011

Моя идея состоит в том, что ваш код для преобразования в BCD содержит ошибки.он не делает то, что должен, поэтому вы наблюдаете неправильный результат.

, кроме этой шутки: 0xe0, если хранится в знаке, является отрицательным числом.это может привести к неприятным уловкам, если вы не будете обращать особого внимания на знак временных переменных, которые вы используете при вычислении результата.

edit: теперь, когда вы опубликовали некоторый код,ясно, что, хотя вы вычисляете правильное значение для первой цифры в lo, вам нужен еще один шаг для получения правильного значения в hi.

используя 0xe0 в качестве ввода, вы фактически вычисляете (22<<4) + 4 = 356 = 0x164 вместо (2<<8)+(2<<4)+4 = 548 = 0x224.

...