我怎樣才能得到一個字符串的兩個字節長度:獲取字符串長度爲兩個字節
例如:
'foo'
長度爲3會給我:0x0
和0x3
。'bar' * 100
,其長度爲300,就會給我:0x1
和0x2c
。
我需要在通過TCP套接字發送之前將兩個字節(作爲字節,而不是ascii)預先加入到字符串中。這兩個字節被接收方用作接收字符串的長度。
我怎樣才能得到一個字符串的兩個字節長度:獲取字符串長度爲兩個字節
例如:
'foo'
長度爲3會給我:0x0
和0x3
。'bar' * 100
,其長度爲300,就會給我:0x1
和0x2c
。我需要在通過TCP套接字發送之前將兩個字節(作爲字節,而不是ascii)預先加入到字符串中。這兩個字節被接收方用作接收字符串的長度。
你需要的是非常簡單的。該函數返回兩個字節的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()和ntohs和()函數從插座模塊,使其便攜式防空火炮平臺,並通過線路發送整數時使用big-endian(網絡字節順序)。
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