これが実行されるハードウェア/OS をどの程度制御できますか? 非常に移植性の高いコードを書いていますか、それとも [たとえば] 32 ビットおよび 64 ビットの x86 Windows でのみ実行されますか?
上記で説明したように、完全に「スーパーポータブル」にするために、「実装定義」サイズのオブジェクト (たとえば、16、18、32、36、または 64 ビットの int など) を使用することはできません。このようなアイテムは、定義された数と順序のバイトとして保存して、転送時に切断/再順序付けされないようにする必要があります。浮動小数点はさらに悪化する可能性があります...
多くの「超ポータブル」アプリケーションは、データをテキストとして保存します。少し遅くなりますが、テキストは、実行するアーキテクチャに関係なく単なるバイトのストリームであり、使用するマシンに関係なく同じように順序付けられるため、簡単に移植できます (0-9 に固執する限り、A- Za-z、!?<>、.()*& およびその他のいくつかの文字 - EBCDIC でエンコードされたマシンには注意してください。ただし、「ascii-to-ebcdic」変換を処理する傾向があります)。もう一方の端は、必要に応じてテキストを文字列/整数/浮動小数点数/倍精度浮動小数点数に変換するだけです。整数から数字の文字列への変換には、1 桁につき 1 つの除算が必要です (16 進数または base-36 を使用すると、多少は良くなりますが、人間が判読しにくくなります - 良いことも悪いこともあります)。これは、4 バイトを格納するより明らかに遅いです。他の欠点は、s (使用される値に応じて) 多くの場合、数値をバイナリとして保存するよりもテキストで保存する方が時間がかかります。そのため、ネットワーク パケットは少し大きくなります。これは、変換よりも大きな影響があります。プロセッサは、10Gbit ネットワーク カードで 1KB を送信するのにかかる時間内に多くの計算を行うことができるからです。そしてもちろん、1 つの数字 123456 と 3 つの 12、34、56 との違いを見分けることができるように、数バイト (スペース、コンマ、改行など) を追加する必要があります。[もちろん、" を使用する必要はありません。 、「それぞれの間]。そして、それが到着したら、相手側で全体を解析するためのコードが必要です。プロセッサは、10Gbit ネットワーク カードで 1KB を送信するのにかかる時間内に多くの計算を実行できるためです。そしてもちろん、1 つの数字 123456 と 3 つの 12、34、56 との違いを見分けることができるように、数バイト (スペース、コンマ、改行など) を追加する必要があります。[もちろん、" を使用する必要はありません。 、「それぞれの間]。そして、それが到着したら、相手側で全体を解析するためのコードが必要です。プロセッサは、10Gbit ネットワーク カードで 1KB を送信するのにかかる時間内に多くの計算を実行できるためです。そしてもちろん、1 つの数字 123456 と 3 つの 12、34、56 との違いを見分けることができるように、数バイト (スペース、コンマ、改行など) を追加する必要があります。[もちろん、" を使用する必要はありません。 、「それぞれの間]。そして、それが到着したら、相手側で全体を解析するためのコードが必要です。
システムが常に 32 ビット整数と IEEE-754 浮動小数点数を使用していることがわかっている場合 [これらは非常に一般的です!]、バイト オーダーを気にするだけで済むかもしれません。また、常に「x86」またはそのようなものになることがわかっている場合は、バイトオーダーについても心配する必要はありません. しかし、「私のコードを iPhone で実行するのは良い考えだ」と判断した場合、コードを変更する必要があるかもしれません。もちろん、それをiPhone側に任せて、残りが必要とするものに準拠させることもできます.