nthol機能のない8ビットデバイスと通信する必要があります。プロトコルバッファライブラリを使用することもできません。
次のC関数は、実行されているアーキテクチャに関係なく同じ出力文字列を生成します(異なるエンディアン、異なるビット数)。
void encode(uint32_t input, unsigned char* buf, int buf_len) {
assert(sizeof(uint32_t) <= buf_len);
buf[0] = input >> 24 & 0xFF;
buf[1] = input >> 16 & 0xFF;
buf[2] = input >> 8 & 0xFF;
buf[3] = input & 0xFF;
}
次の関数は、そのようなエンコードされた文字列を正しく読み取り、すべてのアーキテクチャで同じ結果を生成します。
void decode(const unsigned char* buf, int buf_len, uint32_t* output) {
assert(sizeof(uint32_t) <= buf_len);
*output = buf[0];
*output <<= 8;
*output |= buf[1];
*output <<= 8;
*output |= buf[2];
*output <<= 8;
*output |= buf[3];
}
8ビットプロセッサで32ビット整数が何らかの理由で正しく処理されない可能性はありますか?