Теперь запакуем строку.
В этом случае следует передавать тип данных bytes.
>>> struct.pack('=s', b'a')
b'a'
Для записи слова следует указывать количество символов.
>>> struct.pack('=5s', b'hello')
b'hello'
Кстати, запакованный вид соответствует исходному тексту. Всё верно, символ есть в таблице ASCII, то есть его код попадает в диапазон 0-127, он может быть записан одним байтом и имеет визуальное представление. А вот что будет если добавить символ вне ASCII
>>> struct.pack(f'=s', b'ё')
SyntaxError: bytes can only contain ASCII literal characters.
Ошибка возникла еще на этапе создания объекта bytes, который не может содержать такой символ. Поэтому надо кодировать эти байты из строки.
>>> enc = 'ёжик'.encode('utf-8')
>>> struct.pack(f'={len(enc)}s', enc)
b'\xd1\x91\xd0\xb6\xd0\xb8\xd0\xba'
Заметьте, длина такой строки в байтах отличается от исходной длины, так как символы вне ASCII записываются двумя байтами и более. Поэтому здесь формат создаём на лету, используя получившуюся длину как каунтер токена.
#libs#basic
被 Covid 偷走的五年
我依旧觉得 2019 年是去年,要不是写博客梳理我都不知道我干了这么多事。我说什么来着,博客给记忆增加了一个全新的维度,是最好的时间胶囊。
下一个 5 年就是 2030 了,we're literally already closer to 2050 than 2000, can you even imagine?
本文是我 2024 年 8 月 Patreon 的月度选题。本月两个命题平票,由至尊糖妈的双倍票数 tie breaker 所以选了这个话题。加入 patreon 可以跟其它赞助者一起选出下个月你想看的博客文章,并且支持本博客的持续创作。下期选题已经发布欢迎金主点击投票:
- My pet peeves
- Mid 30s vs Mid 20s
- What's your fun fact
#blog#patreon