Здравствуйте, 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 помоему правильно, а вот вторая функция косячит
А в чём собственно косяк? Или ты хотел получить обратно тоже самое что было до преобразования?
Дак ведь старшую часть ты обрезал. Т.е. у тебя в начале были символы числа, а после преобразования получились просто числа и к символам их надо дополнить