为了账号安全,请及时绑定邮箱和手机立即绑定

如何从结构中打印字符串?

如何从结构中打印字符串?

Go
慕仙森 2022-01-18 13:47:28
所以我有字符串john。我把它打包成一个结构。当我打开包装时,我该如何打印john?目前它只打印j. Sammy如果我将字符串更改为或其他长度不同的名称,同样的事情?我有 2 个函数来打包和解包结构。这就是我不需要担心的长度first_name。该功能可以为我做。结构基本是user_id(在这种情况下1)first_name(一个人的名字。这个字符串可以有不同的长度。在这种情况下john)我的代码from struct import *def make_struct(user_id, first_name):    return pack("is", user_id, first_name)def deconstruct_struct(structure):    return unpack("is", structure)packed = make_struct(1, "john")unpacked = deconstruct_struct(packed)print(unpacked[1])当前输出为:j
查看完整描述

1 回答

?
慕标琳琳

TA贡献1830条经验 获得超9个赞

您需要将字符串的长度添加到格式字符串中:


packed = pack("i4s", 1, "john")

unpacked = unpack("i4s", packed)

print(unpacked[1])

>> john

如果您需要一个可变长度的字符串 - >使用python中的struct模块打包和解包可变长度数组/字符串


编辑:


您的解决方案可以像这样扩展:


from struct import *


def make_struct(user_id, first_name):

    first_name_length = len(first_name)

    fmt = "ii{}s".format(first_name_length) #generate format string with length of first_name

    return pack(fmt, user_id, first_name_length, first_name) #add the length to the pack


def deconstruct_struct(structure):

    user_id, first_name_length = unpack("ii", structure[:8]) #extract only userid and length from the pack

    fmt = "ii{}s".format(first_name_length) #generate the format string like above

    #return unpack(fmt, structure) #this would return a (user_id, length of first name, first_name) tuple

    return (user_id, unpack(fmt, structure)[2]) #this way, we return only the (user_id, first_name) tuple


packed = make_struct(1, "john")

unpacked = deconstruct_struct(packed)


查看完整回答
反对 回复 2022-01-18
  • 1 回答
  • 0 关注
  • 171 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信