2017-02-21 11 views
1

は、どのように私は、文字列の2バイトの長さを得ることができるよう、文字列の長さを取得します。たとえば2バイト

:長さが3である

  1. 'foo'ことは私を与えるだろう:0x00x3を。
  2. 'bar' * 100長さが300の場合は、0x10x2cとなります。

TCPソケット経由で送信する前に、文字列に(ASCIIではなくバイトとして)2バイトを前置する必要があります。 2バイトは、受信されるストリングの長さとして受信機によって使用される。

+0

詳細については、[質問の編集](http://stackoverflow.com/posts/42370436/edit)をご覧ください。今はあなたが何を望んでいるかは不明です。 –

+0

o.k.私は何をしようとしているのか説明しました。 –

+0

わかりやすさそうです。各文字列は、文字列の全長を示す2バイトで始まる必要があります。しかし、その言語は何ですか? – SRO

答えて

0

あなたが必要とするものはかなり簡単です。この関数は、文字列の長さをエンコードする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) 
-1

私はあなたが(htonsを使用することをお勧め)、それポータブルaccrossプラットフォームにするソケットモジュールからntohs()関数、ワイヤー上で整数を送るときはビッグエンディアン(ネットワークバイトオーダー)を使います。

n = socket.htons(len("bar"*100)) 
byte1, byte2 = n >> 8, n & 0xff 
+0

'len()'は、Pythonの 'int'オブジェクトを返します。ここではプラットフォームの問題はなく、このため、 'htons()'呼び出しは価値がありません。 –

関連する問題