私はAPIアプリケーションを更新しています。新しいバージョンは、通信にバッファを使用します。Ruby + Python Pack
python-clientがあります。メッセージは、これは、Rubyに変換
struct.pack("!I%ds" % len(text),len(text),str(encode(text))
が詰め込まれています。
[text.size,text].pack("Na*")
は、しかし、小さな違いがあります。 文字列のサイズが10未満の場合、最初の項は15より大きい場合は等しくなります。しかし、彼らは10と15の間であれば
...間[5].pack "N" => "\x00\x00\x00\x05"
[11].pack "N" => "\x00\x00\x00\v"
[15].pack "N" => "\x00\x00\x00\x0F"
[16].pack "N" => "\x00\x00\x00\x10"
struct.pack("!I", 5) --> '\x00\x00\x00\x05'
struct.pack("!I",11) --> '\x00\x00\x00\x0b'
struct.pack("!I",15) -->'\x00\x00\x00\x0f'
struct.pack("!I",16) --> '\x00\x00\x00\x10'
にAPIがルビー満載のシーケンスの大きさを認識していないものがある、私は逃したとどのように私は適応することができますか?
p.s.違いは、ruby-versions(2.2,2.4 + 2.5でテスト済み)から独立しているようです。
JSONまたはYAMLを使用してこれを検討しましたか?それは少し遅いかもしれませんが、それはあなたのために重要でしょうか? –
問題を明確にすることはできますか?あなたが示した結果では、RubyとPythonは同じ値を生成していますが、バイトを別々に表示しているだけです。 Rubyは11を '\ v'として表示します。これは"垂直タブ "文字ですが、Pythonは16進数の値である' \ 0x0b'を表示します。同様に、この範囲には、それぞれ '\ n'、' \ f'、 '\ r'として表示される「行送り」(0x0a)、「書式送り」(0x0c)、および「復帰」(0x0d) Pythonは16進値で表示されますが、実際のバイトは同じです。 – matt
右 コードを慎重に再調査した結果、エラー:ソケットにメッセージを出力するputs-output-lineをコメントするのを忘れていました。それは明らかにapiによって容認されなかった。 – hartmut