1

タイプをビット単位で定義できるかどうか疑問に思っていました。具体的には、RTP で失われたパッケージの累積数を格納するために、24 ビット型を定義したいと考えています。

そうでない場合、int から 3 バイトを memcpy するにはどうすればよいですか。これを行うと、どのように終了するかわかりません。

memcpy(pkg + 29, (&clamped_pkgs_lost)+(sizeof(char)), 3*sizeof (char));
4

3 に答える 3

1

C では、基本型またはそのビットフィールドに関してのみ整数型を定義できます。

ビットフィールドは風変わりです。彼らの住所を取得することはできません。また、24 ビットだけが必要な場合はスペースを節約できませんが、プラットフォームには 8、16、および 32 ビットの基本的な型しかありません。これらの 24 ビットを格納するには、3 つの 8 ビット整数または 1 つの 32 ビット整数 (または 1 つの 16 ビットと 1 つの 8 ビット) のいずれかを使用する必要があります。

カウンターのような単純なものには、32 ビット整数を使用します。24 ビット値に制限したい場合は、次の 2 つのオプションがあります。

  • 8つの最上位ビットをゼロにして、ラップアラウンドをシミュレートします
  • 値を 2 24 -1 に制限するため、それを超えて大きくなったり、ラップアラウンドしたりすることはありません
于 2013-04-22T03:58:20.430 に答える
0

狭い整数をより大きな整数に格納できます。必要なビットをマスクするだけです。

int main() {
    long data;
    data & 0xFFFFFF;
}

または、構造体メンバーにビットフィールドを定義できます。ただし、ビットフィールドのレイアウトが標準化されていないため、構造体をディスクに書き込んで別のシステムで開こうとしないでください。

struct {
    long data:24;
};
于 2013-04-22T04:00:35.683 に答える