Re: Помогите с BCD
От: ZAVRus Украина  
Дата: 26.09.06 19:13
Оценка:
Здравствуйте, Smooky, Вы писали:

S>Просмотрел по этмоу вопросу в форуме, ничего конкретного...

S>Есть телефонный номер из 15 цифр
S>char sz[16] = "123456789012345";
S>BYTE cb[8] = {0};
S>надо чтобы в cb было: младшие 4-ре бита первого байта — это цифра 1, старшие 4-ре бита — это 2-ая цифра, младшие 4-ре бита второго байта — это 3-я цифра и т.д.
S>т.е. каждый полубайт — это цифра десятичная от 0 до 9
S>void A2BCD(const char* psz, unsigned char* cb)
S>{
S> const char* src = psz;
S> unsigned char* dst = cb;
S> int len = strlen(psz);

S> for (int i = 0; i < len; i += 2) {

S> *dst = (*(src++) << 4) & 0xF0;
S> *(dst++) |= (*(src++) & 0x0F);
S> }
S>}

По поводу A2BCD. Зачем & 0xF0, после << 4 заполенение идёт нулями.

S>void BCD2A(unsigned char* cb, char* psz)

S>{
S> char* dst = psz;
S> unsigned char* src = cb;
S> int len = sizeof(cb);

S> for (int i = 0; i < 7; i++) {

S> *(dst++) = *src >> 4;
S> *(dst++) = *(src++) & 0x0F;
S> }
S>}

S>чот не работает! хотя в BCD помоему правильно, а вот вторая функция косячит

А в чём собственно косяк? Или ты хотел получить обратно тоже самое что было до преобразования?
Дак ведь старшую часть ты обрезал. Т.е. у тебя в начале были символы числа, а после преобразования получились просто числа и к символам их надо дополнить
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.