2017-02-21 74 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()'调用在这种情况下是没有价值的。 –

相关问题