0

a[0]私は3つの配列に24ビットのデータを持っておりa[1]a[2]乗算と除算を定数で計算する必要がありますが、結果は3つの配列のままです。

たとえば、、、に 保存しdata = 999900h ますa[0] = 99a[1] = 99a[2] = 00

[(999900h/64)*15000]/157286 << **process???**

結果は、、に保存さ3A97hれますb[0] = 00b[1] =3Ab[2] = 97

私の質問は

1.)プロセスで高速計算するためのコードを記述し、高速でポインタを作成するにはどうすればよいですか?プロセスでポインタを使用する方法は?

2.)配列から整数への変換プロセスや整数から配列への変換プロセスは使用できませんか?

4

2 に答える 2

1

最も簡単な「解決策」は次のとおりです。

 uint32_t data = 0x00999900;

 unsigned char const * a = (unsigned char const *)&data;

今、あなたはa[0]、...、a[3]。順序は、システムのエンディアンによって異なります。


エンディアンに依存しないソリューションは代数的に機能します。

uint32_t data = 0x3A97;

unsigned char b[sizeof data] = {  data >> 24  & 0xFF,       // b[0]
                                 (data >> 16) & 0xFF,       // b[1]
                                 (data >>  8) & 0xFF,       // b[2]
                                  data        & 0xFF        // b[3]
                               };

配列から値を再構成することもできます。エンディアンに依存する方法は次のとおりです。

uint32_t data;
unsigned char * p = (unsigned char *)&data;
p[0] = 0x00;
p[0] = 0x99;
p[0] = 0x99;
p[0] = 0x00;

// now "data" is 0x00999900

そして、これが代数的な方法です:

uint32_t data = a[0] * 256 * 256 * 256 + a[1] * 256 * 256 + a[2] * 256 + a[3];
于 2012-09-27T16:47:00.900 に答える
0

この場合、ユニオンを使用するのが好きです。

#inlude<stdint.h>

union array_int {
  char a[4];
  uint32_t num;
} data = {.a = {00, 99, 99, 00}};

printf("%d", data.num);

エンディアンを考慮してください。htonl最も重要なバイトから最も重要でないバイトを入力する場合に使用しますが、リトルエンディアンシステム上にあります。エンディアンをいじりたくない場合は、提案された代数の提案の1つを使用することをお勧めします。

于 2012-09-27T17:47:39.157 に答える