2017-02-21 120 views
1

我怎樣才能得到一個字符串的兩個字節長度:獲取字符串長度爲兩個字節

例如:

  1. 'foo'長度爲3會給我:0x00x3
  2. 'bar' * 100,其長度爲300,就會給我:0x10x2c

我需要在通過TCP套接字發送之前將兩個字節(作爲字節,而不是ascii)預先加入到字符串中。這兩個字節被接收方用作接收字符串的長度。

+0

請[編輯問題](http://stackoverflow.com/posts/42370436/edit)來解釋更多。目前尚不清楚你想要什麼。 –

+0

o.k.我解釋了我想要做的事情。 –

+0

似乎很容易理解:每個字符串必須以2個字節爲單位,告訴字符串的總長度。但是,語言是什麼? – SRO

回答

0

你需要的是非常簡單的。該函數返回兩個字節的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()和ntohs和()函數從插座模塊,使其便攜式防空火炮平臺,並通過線路發送整數時使用big-endian(網絡字節順序)。

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

'len()'返回一個python'int'對象。這裏沒有平臺問題,因此'htons()'調用在這種情況下是沒有價值的。 –

相關問題