1

私はCに本当に慣れていないので、少し混乱しています。

int16をbyte[]配列に変換しようとしています。

-200のようなint16があり、次の例のように、それをbyte[2]配列に変換したいと思います。

Velocity = -200 = hex FF38 = [hex FF] [hex 38] = [255] [56]

以下のように値を取得してシリアルポートに渡しますが、int16を渡し、関数にそれをbyte[]に変換させる必要があります。

Serial.print(255,BYTE);
Serial.print(56,BYTE);

次のコードを見つけましたが、動作させることができませんでした

Serial.print((velocity & 0xff00) >> 8, BYTE);
Serial.print(velocity & 0xff, BYTE);

助言がありますか??どんな助けでもいただければ幸いです。

4

1 に答える 1

3

あなたのアプローチはうまく見えますが、エンディアンの問題につまずいているのではないでしょうか。

シリアルプロトコルは、ビットレベルおよび/またはバイトレベル(異なる場合があります)でリトルエンディアンまたはビッグエンディアンと見なすこともできます。ユビキタスUSBなどの多くのシリアルインターフェイスは、ビットレベルでリトルエンディアンです。RS-232、RS-422、RS-485などの物理規格も、通常、最下位ビットを最初に送信するUARTで使用されます...

コードは最上位バイトを最初に送信します(「ビッグエンディアン」)。

于 2011-07-09T22:46:54.633 に答える