3

私は最近、携帯電話を介してSMSを送受信するためのSMSプロジェクトに着手することを決定しました。

データはPDU形式で送信されます-ASCII文字を7ビットのGSMアルファベット文字に変更する必要があります。これを行うために、 http://www.dreamfabric.com/sms/hello.htmlなどのいくつかの例に出くわしました。

この例は、オクテクトを作成するために、最初のセプテクトに挿入されている2番目のセプテットの右端のビットを示しています。

>>は左に挿入され、<<は右に挿入されるため、ビット単位のシフトによってこれが発生することはありません。私が理解しているように、これを作成するには、ある種のビット単位の回転が必要です。ビットを右側から移動して左側に挿入する方法を教えてもらえますか?

ありがとう、

4

2 に答える 2

3

これを行うための簡単なアルゴリズムを次に示します。

int b1, bnext;
int mod;
int pand;
char *b; // this is your byte buffer, with message content
int blen; // this is your byte buffer length
char sb[160];
int totchars = 0;

b1 = bnext = 0;
for (int i=0; i < blen; i++) {
    mod = i%7;
    pand = 0xff >> (mod + 1);
    b1 = ((b[i] & pand) << mod) | bnext;
    bnext = (0xff & b[i]) >> (7 - mod);
    sb[totchars++] = (char)b1;
    if (mod == 6) {
        sb[totchar++] = (char)bnext;
        bnext = 0;
    }
}
sb[totchar] = 0;

7 ビットの圧縮バッファを C の通常の ASCII char 配列に変換します。

于 2010-04-11T15:20:58.910 に答える
0

右側からビットを移動して左側に挿入する方法を教えてもらえますか?

Cには間接的な方法がありますが、私は単純に次のようにします。

void main()
{
    int x = 0xBAADC0DE;
    __asm
    {
        mov eax, x;
        rol eax, 1;
    }
}

これにより、ビットが左に回転します(シフトしません!)(1ステップ)。「ror」は右に回転します。

于 2010-04-11T15:36:13.290 に答える