2017-12-30 9 views
1

API- 응용 프로그램을 업데이트 중입니다. 새 버전에서는 버퍼를 사용하여 통신합니다.Ruby + Python Pack

python-client가 있습니다. 메시지는이 루비 변환

struct.pack("!I%ds" % len(text),len(text),str(encode(text)) 

로 포장되어 있습니다

[text.size,text].pack("Na*") 

그러나, 작은 차이가 있습니다. 문자열의 크기가 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'

그들이 10와 15 사이에있는 경우 API는 내가 놓친 뭔가를 루비 포장 시퀀스의 크기를 있나요 인식되지 않고 어떻게 적용 할 수 있습니까?

p.s. 차이점은 루비 버전 (2.2, 2.4 + 2.5로 테스트)과는 별개의 것으로 보인다.

+0

JSON 또는 YAML을 사용해 보셨습니까? 약간 더 느릴 수 있지만, 그것은 당신에게 의미가 있습니까? –

+0

문제를 명확히 할 수 있습니까? 결과에서 Ruby와 Python은 동일한 값을 생성하고 있으며, 바이트를 다르게 표시하고 있습니다. Ruby는 "수직 탭"문자이기 때문에 11을'\ v'로 보여주고 파이썬은 16 진수의 값인'\ 0x0b'를 보여줍니다. 비슷하게이 범위에는 Ruby가'\ n','\ f' 및'\ r'로 각각 표시하는 "줄 바꿈"(0x0a), "양식 공급"(0x0c) 및 "캐리지 리턴"(0x0d) 파이썬은 16 진수 값을 표시하지만 실제 바이트는 동일합니다. – matt

+0

오른쪽! 코드를 신중하게 재검토 한 후 오류 : 소켓에 메시지를 출력하는 puts-output-line에 주석을다는 것을 잊어 버렸습니다. 그것은 분명히 api에 의해 용인되지 않았습니다. – hartmut

답변

0

두 명령이 동일하게 작동하는 것처럼 보입니다. 오류는 디버깅 오류로 인해 발생했습니다.