2022-03-19 04:48:09
Re③:UDPで一度に複数データを送る場合
正解の値はパッと出てきませんが、おそらく設定が仕様と違ってますよ。 >,f{SP}0 「,f」で引数を32bitの浮動小数1つとしているなら、続くのは、文字の「0」ではなく、 浮動小数の値のバイナリイメージ4バイトになるはずです。 参考のサイトの例で言えば、 「float32 1.234」が、「 3f (?) 9d () f3 (ó) b6 (¶)」となっている部分です。 (確保・バイナリ取得・バイナリ設定を使う方法でfloat32のバイナリイメージを得る方法もあります) また、アドレス部、引数の型と数の部分、個々の引数のそれぞについて、 32bit(4byte)にパディングが必要と思います。なので、4バイト分ずつかぞえて、 \0(プログラム中では{SP})を適時追加で埋めることになることと思います。 (例えば、,f{SP}も4バイト倍数になるよう、,f{SP}{SP}とする必要がある。) 一旦遠回りをして、必要なアドレスと任意の数の引数を適切に整形して バイナリイメージ(の文字列)を返す関数(命令)を作ってしまっても 良いかもしれません。送信する内容が固定で数が多くないのであれば、 すべて手計算で求めておくのもありですが、間違いを避ける・間違いを 見つけやすくするという点からはあまりおすすめしません(※)。 ※ 例えば10個の値を手計算すると、手法の間違いで全部一様に間違ってしまう 可能性や単なる計算ミスや記述ミスで個々に間違いがある可能性があります。 このとき、浮動小数の値の変換など計算した結果を見ても間違いに気がつくにくい 場合もあります。 1つの関数にまとめることで、複雑化はするものの、 ・手法の間違いはその関数の実装に集約され1箇所になる。 ・値の間違いはその関数の引数として人間がわかる値を渡せるように設計することでわかりやすくもできる。 ・増減にも対応しやすい。また、他で使うときも使い回せる。使えば使うほどバグ取りにもなり安定する。 となります。 参考まで。 |