通知
すべてクリア
Topic starter
2010年3月7日 3:33 PM
上位からchar[256]データを受け取って、そこから先頭7ビットは捨てて
8ビット目から文字列情報最大126文字(バイト)が入っているため
char[126]を定義して文字列情報を格納しようと思っているのですが
どのようにすれば宜しいかご教授願えないでしょうか?
2010年3月7日 8:22 PM
2進数で図解を書いてその通りのプログラムを書けばいい。
data[i] data[i+1] data[i+2]を2進数で考える。
判りやすいように表現する。
abcdefgh ijklmnop qrstuvwx
これが
hijklmno pqrstuvwx
こうなってほしいわけだ。
そのためにビットをどう動かすか。
data[i]を7ビット左ずらしてはみ出たの消せば h0000000
data[i+1]を1ビット右ずらせば 0ijklmno
合わせれば hijklmno
以下実装例
以下は126を超える変なデータかチェックしてない。
入力と出力を同じdata引数にしている。
入力データを使い果たすか出力で0になるまでの個数を返す。
int test(char * data, int size)
{
unsigned char * pos = (unsigned char*)data;
int i;
for(i=0; i<size-1; ++i) {
pos[i] = ((pos[i] << 7) & 0x80) | ((pos[i+1] >> 1) & 0x7f);
if(pos[i] == 0) {
break;
}
}
return i;
}
unsigned char に変えているから & 0x7f は要らんな。
Topic starter
2010年3月7日 9:18 PM
ありがとうございました。