逐步实现TCP服务端Step03-11:让Codec支持字符串处理

在封装Codec的时候,并未考虑对字符串的编解码操作,这里做一下补充。字符串不像二进制数值,其长度不固定,需要一个额外的字段来记录字符串的长度。
新版Codec类图,仅增加了两个方法:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
Codec& Codec::operator<<(char* src)
{
    unsigned short str_len 
        = (unsigned short)strlen(src);
    if (IsCanEncode((int)(sizeof(str_len) + str_len))) {
        *this << str_len;
        memcpy(cur_, src, str_len);
        cur_ += str_len;
    }
    return *this;
}

Codec& Codec::operator>>(char* dst)
{
    unsigned short str_len;
    *this >> str_len;
    if (IsCanDecode(str_len)) {
        memcpy(dst, cur_, str_len);
        cur_ += str_len;
        dst[str_len] = 0;
    }
    return *this;
}

代码详见:

<==  index  ==>