SMS PDU кодирование в c - PullRequest
       60

SMS PDU кодирование в c

1 голос
/ 04 ноября 2019

Я работаю над кодированием SMS PDU на языке C. У меня проблемы с кодированием номера телефона. Если номер телефона «12345678912», он кодируется как «2143658719F2», что является правильным. Но если номер телефона «33689004000», он кодируется как «33869400F0». Нули с нечетным индексом отсутствуют после кодирования.

Код:

static int
EncodePhoneNumber(const char* phone_number, unsigned char* output_buffer, int buffer_size)
{
    int output_buffer_length = 0;  
    const int phone_number_length = strlen(phone_number);
    if ((phone_number_length + 1) / 2 > buffer_size)
        return -1;

    int i = 0;
    for (; i < phone_number_length; ++i) {

       if (phone_number[i] < '0' && phone_number[i] > '9')
           return -1;

        if (i % 2 == 0) {
            output_buffer[output_buffer_length++] = BITMASK_HIGH_4BITS | (phone_number[i] - '0');
        } else {
            output_buffer[output_buffer_length - 1] =
                (output_buffer[output_buffer_length - 1] & BITMASK_LOW_4BITS) |
                 ((phone_number[i] - '0') << 4); 
        }
    }

   return output_buffer_length;
}

Какое решение этой проблемы?

1 Ответ

1 голос
/ 04 ноября 2019

Ошибка предположительно не в показанном коде, а в том месте, где вы просматриваете результат. Я подозреваю, что у вас есть printf("%x", …) вместо printf("%02x", …).

...