0

次のような10進数の文字列があります。

965854242113548732659745896523654789653244879653245794444524
length : 60 character 

関数に送信したいのですが、まずはできるだけ長さを短くしたいです。どうやってやるの?

私はそれをbase-34に変換することを考えています、それはになります1RG7EEWTN7NW60EWIWMASEWWMEOSWC2SS8482WQE。これは40文字の長さです。どうすればもっと減らすことができますか?

4

1 に答える 1

1

あなたの数は70ビットに収まります-そのような小さなペイロードの圧縮は無意味に思えます。サーバーAPIが任意のバイナリデータをサポートしていると仮定すると、値をバイナリでエンコードし、必要なバイト数のプレフィックスを付けるだけです。

  • 1バイトの長さの情報-854657986453156789675の場合、最初に示した例では、これは9になります。
  • 9バイトのバイナリペイロード

→例として転送された10バイトのデータ。

16進数での例:

09 2e 54 c3 1e 81 cf 05 fd ab

バイト単位の長さで、これはもちろん255バイトまでの小数のみをサポートしますが、これで十分だと思います。トランスポートプロトコルにパケットの長さの概念が組み込まれている場合は、最初の長さのバイトをスキップすることもできます。

重要:すべての側が同じエンディアンを使用していることを確認してください。ネットワークを介してデータを送信しているため、ネットワークのバイト順序(ビッグエンディアン)は自然なものになります。

非常に大きな数を送信する場合は、データのバイナリ表現に任意の圧縮アルゴリズムを使用できることに注意してください。ただし、圧縮を実行可能にするには、ペイロードを大幅に大きくする必要があります。たとえば、上記の9バイトのペイロードにzLib圧縮を使用すると、zLibデータ構造のオーバーヘッドのために18バイトのペイロードになります。

ペイロードに任意のバイトを使用できない場合(そしてその場合のみ)、データをエンコードできます(おそらく圧縮後)。最近のほとんどのライブラリにはBase64のサポートが組み込まれているため、これはデータを自然に表現する方法になります。

于 2012-08-17T09:04:02.673 に答える