Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/302.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 用于C中SMS连接的GSM7位填充_C#_.net_Sms_Bit Manipulation_Smpp - Fatal编程技术网

C# 用于C中SMS连接的GSM7位填充

C# 用于C中SMS连接的GSM7位填充,c#,.net,sms,bit-manipulation,smpp,C#,.net,Sms,Bit Manipulation,Smpp,我正在编写一个算法,用于将大于140字节的大型SMS消息拆分为140字节的较小部分,以便能够通过SMPP协议将它们发送给移动运营商 每个部分都有一个由6或7个字节组成的UDHUser数据头。我用于此目的的文档是: 因此,消息部分的结构将是: [UDH][PART_BODY]在哪里 [UDH]-6或7字节 [正文部分]-133或134字节 此外,上述每个来源都提到,如果使用GSM7编码,则应在零件体的开头添加填充位,以确保零件体将从septet边界开始 这就是我开始感到困惑的地方。。。虽然我了解S

我正在编写一个算法,用于将大于140字节的大型SMS消息拆分为140字节的较小部分,以便能够通过SMPP协议将它们发送给移动运营商

每个部分都有一个由6或7个字节组成的UDHUser数据头。我用于此目的的文档是:

因此,消息部分的结构将是:

[UDH][PART_BODY]在哪里

[UDH]-6或7字节

[正文部分]-133或134字节

此外,上述每个来源都提到,如果使用GSM7编码,则应在零件体的开头添加填充位,以确保零件体将从septet边界开始

这就是我开始感到困惑的地方。。。虽然我了解SEPTET是如何存储在一个字节中的,以及填充的含义,但我不知道如何在我的实际代码中实现这一点,就像这样:

public void AddUDHToSmSend(ref SMSend Sm, byte[] Udh)
{           
    byte[] msg = new byte[Udh.Length + Sm.Message.Length];
    Udh.CopyTo(msg, 0);
    Sm.Message.CopyTo(msg, Udh.Length);
    Sm.Message = msg;       
}
Udh-字节数组

Message—表示部件主体的字节数组

如何在此上下文中添加填充位


谢谢

因此,除非Sm.message类正在进行位打包,否则您需要自己实现它

类似于这个伪c:

class Bitpacker {
    Bitpacker(Byte* buffer, int size) {
        mBuf = buffer;
        mSize = size;
        mLen=0;
        mOffset=0;
    }

   int pack(Byte val, int nbits) {
      val&=(1<<nbits)-1; //restrict to `nbits` bits
      mBuf[mLen]|= val<<mOffset;
      mOffset+=nbits;
      if (mOffset>=8) {
         mBuf[mLen++]|= val>>(8-nbits);
         mOffset-=8;
      }
      return mLen;  //todo - check that mLen !=size;
   }
}

您希望如何将SEPTET存储在一个字节中?压缩即:您可以在7个字节中存储8个septet,或者在忽略高位的情况下,每个字节存储一个septet?您好。应该打包。Thx@Florin你解决了吗?
foreach octet in header {
    packer.pack(octet,8);
    bitcount+=8;
}
padbits = bitcount%7;
packer.pack(0,padbits);
foreach septet in body {
    packer.pack(septet,7);
}