获取字符串长度为两个字节

时间:2017-02-21 14:43:47

标签: python

如何获得字符串的两个字节长度:

例如:

    长度为3的
  1. 'foo'会给我:0x00x3
  2. 长度为300的
  3. 'bar' * 100会给我:0x10x2c
  4. 我需要在通过TCP套接字发送之前将两个字节(作为字节,而不是ascii)添加到字符串中。接收器使用这两个字节作为接收字符串的长度。

2 个答案:

答案 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