NesCでの配列をuint8_t
に変換したい。uint32_t
誰かが私がこれを行う方法を知っていますか?
私が見つけた解決策は、関数の使用です:
void * memcpy ( void * destination, const void * source, size_t num );
関数もあります:
void * memset ( void * ptr, int value, size_t num );
私のコードではmemcpyを使用していますが、正常に動作します。私の質問に答えてくれたすべての人に感謝します
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];
タイトルには文字列が記載されていますが、質問テキストには記載されていません。これは紛らわしいです。
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つの値があることを前提としています。