如何获得字符串的两个字节长度:
例如:
'foo'
会给我:0x0
和0x3
。'bar' * 100
会给我:0x1
和0x2c
。我需要在通过TCP套接字发送之前将两个字节(作为字节,而不是ascii)添加到字符串中。接收器使用这两个字节作为接收字符串的长度。
答案 0 :(得分: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 :(得分:-1)
我建议您使用套接字模块中的htons()和ntohs()函数使其在平台上可移植,并在通过线路发送整数时使用big-endian(网络字节顺序)。
n = socket.htons(len("bar"*100))
byte1, byte2 = n >> 8, n & 0xff