Преобразование двоично-десятичного кода (BCD) в шестнадцатеричный
может кто-нибудь объяснить мне, как преобразовать BCD в шестнадцатеричное? Например, как я могу преобразовать 98 (BCD) в шестнадцатеричный. Спасибо.
5 ответов
Я не совсем понимаю ваш вопрос, но я предполагаю, что, например, кто-то дает вам число 98, закодированное в BCD, которое было бы:
1001 1000
и вы должны сделать:
62H
что бы я предложил:
1) преобразование BCD-кодированного значения в десятичное значение (D)
2) преобразовать D в шестнадцатеричное значение.
в зависимости от того какой язык программирования вы выберете этот задача будет проще или сложнее.
EDIT: в Java это может быть:
    byte bcd = (byte)0x98; // BCD value: 1001 1000
    int decimal = (bcd & 0xF) + (((int)bcd & 0xF0) >> 4)*10;
    System.out.println(
            Integer.toHexString(decimal)
    );
BCD является подмножеством шестнадцатеричного, поэтому преобразование не требуется - любое заданное значение BCD идентично соответствующему шестнадцатеричному значению. Например, '98' в BCD равно 10011000, что равно 98 в шестнадцатеричном
для любого кодированного значения BCD (которое будет вписываться в int).
итерационного:
unsigned int bcd2dec(unsigned int bcd)
{
    unsigned int dec=0;
    unsigned int mult;
    for (mult=1; bcd; bcd=bcd>>4,mult*=10)
    {
        dec += (bcd & 0x0f) * mult;
    }
    return dec;
}
рекурсивные:
unsigned int bcd2dec_r(unsigned int bcd)
{
    return bcd ? (bcd2dec_r(bcd>>4)*10) + (bcd & 0x0f) : 0; 
}
Я бы создал таблицу из 256 записей, сопоставляя все байты BCD в их двоичный эквивалент; затем вы можете использовать шестнадцатеричную печать вашего языка программирования.
переход между различными комбинациями шестнадцатеричных, десятичных и бинарных. Если вы знаете, как работает двоичный файл, вы должны легко использовать BCD:
Hex  Dec  BCD
0    0    0000
1    1    0001
2    2    0010
3    3    0011
4    4    0100
5    5    0101
6    6    0110
7    7    0111
8    8    1000
9    9    1001
A   10    0001 0000 <-- notice that each digit looks like hex except it can only go to 9.
B   11    0001 0001
C   12    0001 0010
D   13    0001 0011
E   14    0001 0100
F   15    0001 0101
Как только вы получите эту часть, вы сможете использовать divide by 10 или %10, чтобы найти любую комбинацию для создания вашего BCD. Поскольку он использует только 10 комбинаций вместо всех 16, Вы потеряете некоторую информацию.
