我怎样才能得到一个字符串的两个字节长度:获取字符串长度为两个字节
例如:
'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