アプリ版:「スタンプのみでお礼する」機能のリリースについて

ポインタで1バイトごとに読み込むことに成功しましたが
例えば18bitごとに読み込むにはどうしたらいいのでしょうか?

質問者からの補足コメント

  • なお18bitの内訳は、
    2bit - 8bit - 4bit - 4bit
    になっています

      補足日時:2021/04/05 09:39

A 回答 (2件)

めんどくさいけど、シフト演算とビット演算(マスク演算)で


地道に取り出しましょう。

で、基本的には 18bit なんて半端なサイズは使わない方がよいです。
通信プロトコルの処理などでどうしても必要な場合は、
早めにシフト演算とマスク演算でデータを切り出して
きりの良いサイズに直し
構造体などに変換してから処理することをお勧めします。
# C のビットフィールドは処理系依存が強いのでお勧めしません。
# 昔の通信用のミニコンだと、ビットフィールドをきめ細かく使える
# 言語がついてましたが、最近そういう言語はなさそう。
    • good
    • 0
この回答へのお礼

18bitはやはり無理があるのですね
ありがとうございました

お礼日時:2021/04/05 11:02

> ポインタで1バイトごとに読み込むことに成功しましたが



8bit読めてるので、

> 例えば18bitごとに読み込むには

これが12bitとか7bitごとに読み込みたいってなる可能性があるなら、1bit読み込む関数作っとくのが汎用性が高いかも。

C言語なら関数内の静的変数、C++ならクラス化してメンバ変数などで、
・次回読み込むbit位置
・読み込んでる8bitデータ
を保持しといて、
・読み込む位置が8bitを超えたら、1バイトごと読み込むのを実施
・8bitデータを読み込む位置分ビットシフトした最下位ビットを出力
だとか。

18bit読み込むには、上を18回、ビットシフトしながら、論理和演算しながら繰り返しとか。
    • good
    • 1

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!