【问题标题】:SMS PDU encoding in cc语言中的SMS PDU编码
【发布时间】:2020-02-29 21:11:53
【问题描述】:

我正在使用 C 语言进行 SMS PDU 编码。我在对电话号码进行编码时遇到问题。如果电话号码是“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;
}

这个问题的解决方法是什么?

【问题讨论】:

  • 这里有错误if (phone_number[i] &lt; '0' &amp;&amp; phone_number[i] &gt; '9')。应该是||,你的编译器应该已经告诉你了。
  • 你在哪里终止输出缓冲区?
  • output_buffer[output_buffer_length - 1] = ... 为什么要覆盖上次循环中在该内存位置写入的先前值?没有任何意义。
  • OT:关于:int i = 0; for (; i &lt; phone_number_length; ++i) { an objective of coding is to minimize the scope of a variable. in this case, that means: for (int i = 0; i

标签: c embedded sms encode pdu


【解决方案1】:

错误可能不在显示的代码中,而是在您查看结果的位置。我怀疑你有一个printf("%x", …) 而不是printf("%02x", …)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-16
    • 1970-01-01
    • 1970-01-01
    • 2018-06-21
    相关资源
    最近更新 更多