0

NesCでの配列をuint8_tに変換したい。uint32_t

誰かが私がこれを行う方法を知っていますか?

4

3 に答える 3

2

私が見つけた解決策は、関数の使用です:

void * memcpy ( void * destination, const void * source, size_t num );

関数もあります:

void * memset ( void * ptr, int value, size_t num );

私のコードではmemcpyを使用していますが、正常に動作します。私の質問に答えてくれたすべての人に感謝します

于 2012-11-08T08:52:26.003 に答える
0

uint8_tソースのシングルをデスティネーションのシングルに変換したい場合uint32_t、それは実際には非常に簡単です。宛先配列を作成し、ループ内の値をコピーするだけです。

uint8_t *source;
size_t   source_count;  /* Number of entries in the source */

uint32_t *dest = malloc(sizeof(*dest) * source_count);
for (int i = 0; i < source_count; i++)
    dest[i] = source[i];
于 2012-09-19T09:33:55.327 に答える
0

タイトルには文字列が記載されていますが、質問テキストには記載されていません。これは紛らわしいです。

4つの8ビット整数がある場合は、次のようにそれらを1つの32ビットに結合できます。

const uint8_t  a = 1, b = 2, c = 3, d = 4;
const uint32_t big = (a << 24) | (b << 16) | (c << 8) | d;

これにより、そのように順序付けられます。ここで、文字は上記の変数のビットを示します。

0xaabbccdd

つまり、aが最上位バイトでありd、最下位バイトであると見なされます。

配列がある場合は、もちろんこれをループで実行できます。

uint32_t bytes_to_word(const uint8_t *bytes)
{
   size_t i;
   uint32_t out = 0;

   for(i = 0; i < 4; ++i)
   {
     out <<= 8;
     out |= bytes[i];
   }
   return out;
}

上記は、bytesに4つの値があることを前提としています。

于 2012-09-19T09:35:42.193 に答える