271. 字符串的编码与解码

题目:

 

 

解答:

每个串前用分隔符,分隔符指明数据串的长度。

当然实际中的IP分片是:

在IP首部有4个字节是用于分片的,如下图所示。前16位是IP数据报的标识,同一个数据报的各个分片的标识是一样的,目的端会根据这个标识来判断IP分片是否属于同一个IP数据报。中间3位是标志位,其中有1位用来表示是否有更多的分片,如果是最后一个分片,该标志位为0,否则为1。后面13位表示分片在原始数据的偏移,这里的原始数据是IP层收到的传输的TCP或UDP数据,不包含IP首部。

 

 

 

 

class Codec {
public:
    // Encodes a list of strings to a single string.
    string encode(vector<string>& strs) {
        string res="",len,prefix;
        for(auto& str:strs){
            len=to_string(str.size());
            prefix="";//每个字符串前用一个32长度的指示字符串作为分隔,该指示串表示的整数值指示之后的数据串的长度
            if(len.size()<32){
                prefix.assign(32-len.size(),'0');
            }
            prefix+=len;
            res+=prefix;
            res+=str;
        }
        return res;
    }

    // Decodes a single string to a list of strings.
    vector<string> decode(string s) {
        int i=0,len;
        vector<string> res;
        while(i<s.size()){
            len=stoi(s.substr(i,32));
            i+=32;
            res.push_back(move(s.substr(i,len)));
            i+=len;
        }
        return move(res);
    }
};

// Your Codec object will be instantiated and called as such:
// Codec codec;
// codec.decode(codec.encode(strs));

 

posted @ 2020-03-14 23:22  NeoZy  阅读(300)  评论(0编辑  收藏  举报