Python 获取两个字节的字符串长度
如何获取字符串的两字节长度: 例如: 长度为3的“foo”将给出:0x0和0x3。 长度为300的'bar'*100将给出:0x1和0x2c。Python 获取两个字节的字符串长度,python,Python,如何获取字符串的两字节长度: 例如: 长度为3的“foo”将给出:0x0和0x3。 长度为300的'bar'*100将给出:0x1和0x2c。 在通过TCP套接字发送字符串之前,我需要将这两个字节作为字节而不是ascii前缀。接收器使用这两个字节作为接收字符串的长度。您需要的是非常直接的。此函数返回两个字节的元组以编码字符串长度。最重要的字节是第一个 代码: 测试代码: 我建议您使用socket模块中的htons和ntohs函数,使其能够跨平台移植,并在通过线路发送整数时使用big-endian
在通过TCP套接字发送字符串之前,我需要将这两个字节作为字节而不是ascii前缀。接收器使用这两个字节作为接收字符串的长度。您需要的是非常直接的。此函数返回两个字节的元组以编码字符串长度。最重要的字节是第一个 代码: 测试代码:
我建议您使用socket模块中的htons和ntohs函数,使其能够跨平台移植,并在通过线路发送整数时使用big-endian网络字节顺序
n = socket.htons(len("bar"*100))
byte1, byte2 = n >> 8, n & 0xff
请再解释一下。现在还不清楚你想要什么。我解释了我要做的事情。似乎很容易理解:每个字符串必须以2个字节开头,告诉我们字符串的总长度。但是,语言是什么?我以为标签告诉了它是什么语言。在本例中,Python.len返回一个Python int对象。这里没有平台问题,因此htons调用在这种情况下没有价值。
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)
n = socket.htons(len("bar"*100))
byte1, byte2 = n >> 8, n & 0xff