0

私のプロトコルが 40 バイトのメッセージ長 (オーバーヘッドなし) を定義すると仮定しましょう。長さの異なる 20 の変数/情報が含まれています。

メッセージを読み取りながら、読み取ったmessageContent[byteNumber]各バイトの を作成します。

たとえば、10 進数の 20 個の変数の最初のものを保存したい場合284、それは 0001 0001 11002 進数になります。しかし、それは 1.5 バイトであり、完全なバイトのみが送信されます。だから私は受け取り0001 0001 0000 1100ますか?

それは と を意味しmessageContent[0] = 0001 0001 ますmessageContent[1] = 0000 1100

次に、変数を宣言しますvalue01

uint32_t value01= messageContent[0] + messageContent[1].

このテーマについて 5 つの質問があります。

  1. 32 ビットの int として、次のよう0000 0000 0000 0000 0000 0001 0001 1100に見えるはずですよね?

  2. value013 つの 2 進数を合計しようとするので、私の定義は間違っています。これを回避する方法は?0001 0001最初は 17 ではなく 272 (=17+255)であることをプログラムに伝える必要があります。2 番目のバイトは欠落している 12 になるため、1100.

  3. これらのバイトは内部でどのように処理されますか? プログラムは、たとえば 10 進数では 1110 ではなく、2 進数では 1110 であることをどのように認識しますか?

  4. value01を SD カードに保存するとcout << value01、カード上のファイルはどのくらい大きくなりますか? 32 ビット = 4 バイト?

  5. これらの 40 バイト メッセージの 1 つの値が 15 の値を超えないことがわかっている場合、uint8_t代わりに型を使用uint32_tしてカードのスペースを節約できますか? 何十年もの値の後、最終的には CSV ファイルが 1 つしかありません。

この記事を読んでくれてありがとう。

4

0 に答える 0