私のプロトコルが 40 バイトのメッセージ長 (オーバーヘッドなし) を定義すると仮定しましょう。長さの異なる 20 の変数/情報が含まれています。
メッセージを読み取りながら、読み取ったmessageContent[byteNumber]
各バイトの を作成します。
たとえば、10 進数の 20 個の変数の最初のものを保存したい場合284
、それは
0001 0001 1100
2 進数になります。しかし、それは 1.5 バイトであり、完全なバイトのみが送信されます。だから私は受け取り0001 0001 0000 1100
ますか?
それは と を意味しmessageContent[0] = 0001 0001
ますmessageContent[1] = 0000 1100
。
次に、変数を宣言しますvalue01
。
uint32_t value01= messageContent[0] + messageContent[1]
.
このテーマについて 5 つの質問があります。
32 ビットの int として、次のよう
0000 0000 0000 0000 0000 0001 0001 1100
に見えるはずですよね?value01
3 つの 2 進数を合計しようとするので、私の定義は間違っています。これを回避する方法は?0001 0001
最初は 17 ではなく 272 (=17+255)であることをプログラムに伝える必要があります。2 番目のバイトは欠落している 12 になるため、1100
.これらのバイトは内部でどのように処理されますか? プログラムは、たとえば 10 進数では 1110 ではなく、2 進数では 1110 であることをどのように認識しますか?
value01
を SD カードに保存するとcout << value01
、カード上のファイルはどのくらい大きくなりますか? 32 ビット = 4 バイト?これらの 40 バイト メッセージの 1 つの値が 15 の値を超えないことがわかっている場合、
uint8_t
代わりに型を使用uint32_t
してカードのスペースを節約できますか? 何十年もの値の後、最終的には CSV ファイルが 1 つしかありません。
この記事を読んでくれてありがとう。