comData[0] = data[0] << 2 | data[1] >> 4;これは一体なんですか?
comData[0] = data[0] << 2 | data[1] >> 4;これは一体なんですか? https://teratail.com/questions/252929 ここの質問で使われている圧縮アルゴリズム(・・・なのか?)の名前は何でしょうか?
また、回答で #pragma pack(push) #pragma pack(1) typedef struct { int w : 6; int x : 6; int y : 6; int z : 6; } WXYZ; #pragma pack(pop) // sizeof(WXYZ) => 3 とありました。 アライメントで1を設定しているので設置アドレスが4の倍数でない場合でも(実行環境が32bitだとして) 詰め物がされなくなるということですよね? 詰め物はされなくなったとはいえ int型が4つあるのだから 4*4で16byteなんじゃないかと考えてしまうのですが・・・ どうなっているんでしょうか?
C言語関連・47閲覧
ベストアンサー
ビットフィールドと書いてあるんだから、 そこを調べましょう。 #include <stdio.h> typedef struct { int w : 6; int x : 6; int y : 6; int z : 6; } WXYZ; int main() { int i; WXYZ dat = {63,63,63,63}; printf("%x\n\n",dat); for(i = 0; i < 4; i++) printf("%x\n",((unsigned char *)&dat)[i]); return 0; } int の一つの中に、6bit * 4 分のデータが 3byte分、詰め込まれているのがわかりますが? 最初のは、それをひとつづつビットシフトでやろうとしています。
typedef struct { int w : 6; int x : 6; int y : 6; int z : 6; } WXYZ; これってint型変数w,x,y,zをに6を入れて初期化しているんですか? これみたいに https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1129792446
質問者からのお礼コメント
ありがとうございました。
お礼日時:2020/4/18 9:42