配列から7bitずらしてデータを読み込む – プログラミング – Home

配列から7bitずらしてデータを読み込...
 
通知
すべてクリア

[解決済] 配列から7bitずらしてデータを読み込む


どん
 どん
(@どん)
ゲスト
結合: 15年前
投稿: 2
Topic starter  

上位からchar[256]データを受け取って、そこから先頭7ビットは捨てて
8ビット目から文字列情報最大126文字(バイト)が入っているため
char[126]を定義して文字列情報を格納しようと思っているのですが
どのようにすれば宜しいかご教授願えないでしょうか?


引用未解決
トピックタグ
wclrp ( 'o')
 wclrp ( 'o')
(@wclrp ( 'o'))
ゲスト
結合: 18年前
投稿: 287
 

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 は要らんな。


返信引用
どん
 どん
(@どん)
ゲスト
結合: 15年前
投稿: 2
Topic starter  

ありがとうございました。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました