は、どのように私は、文字列の2バイトの長さを得ることができるよう、文字列の長さを取得します。たとえば2バイト
:長さが3である
'foo'
ことは私を与えるだろう:0x0
と0x3
を。'bar' * 100
長さが300の場合は、0x1
と0x2c
となります。
TCPソケット経由で送信する前に、文字列に(ASCIIではなくバイトとして)2バイトを前置する必要があります。 2バイトは、受信されるストリングの長さとして受信機によって使用される。
は、どのように私は、文字列の2バイトの長さを得ることができるよう、文字列の長さを取得します。たとえば2バイト
:長さが3である
'foo'
ことは私を与えるだろう:0x0
と0x3
を。'bar' * 100
長さが300の場合は、0x1
と0x2c
となります。TCPソケット経由で送信する前に、文字列に(ASCIIではなくバイトとして)2バイトを前置する必要があります。 2バイトは、受信されるストリングの長さとして受信機によって使用される。
あなたが必要とするものはかなり簡単です。この関数は、文字列の長さをエンコードする2バイトのうちtuple
を返します。最上位バイトが先頭です。
コード:
def strlen_as_bytes(string):
return len(string) >> 8, len(string) & 0xff
テストコード:
test_strings = (
('foo', (0, 3)),
('bar', (0, 3)),
('foobar', (0, 6)),
('bar'*100, (1, 44)),
)
# check all of the test cases
for test_str, expected_result in test_strings:
assert expected_result == strlen_as_bytes(test_str)
私はあなたが(htonsを使用することをお勧め)、それポータブルaccrossプラットフォームにするソケットモジュールからntohs()関数、ワイヤー上で整数を送るときはビッグエンディアン(ネットワークバイトオーダー)を使います。
n = socket.htons(len("bar"*100))
byte1, byte2 = n >> 8, n & 0xff
'len()'は、Pythonの 'int'オブジェクトを返します。ここではプラットフォームの問題はなく、このため、 'htons()'呼び出しは価値がありません。 –
詳細については、[質問の編集](http://stackoverflow.com/posts/42370436/edit)をご覧ください。今はあなたが何を望んでいるかは不明です。 –
o.k.私は何をしようとしているのか説明しました。 –
わかりやすさそうです。各文字列は、文字列の全長を示す2バイトで始まる必要があります。しかし、その言語は何ですか? – SRO