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

所以我有字符串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


慕仙森
浏览 175回答 1
1回答

慕标琳琳

您需要将字符串的长度添加到格式字符串中: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 packdef 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) tuplepacked = make_struct(1, "john")unpacked = deconstruct_struct(packed)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go