std::string::npos Maximum value for size_t

m_pkgData.replace(sizeof(PKG_HEAD), std::string::npos,  reinterpret_cast<const char*>(pszBody), iBodyLen);

reinterpret_cast 强制类型转换

reinterpret_cast<const char*>(pData)

static_cast 显式类型转换

static_cast<int>(sizeof(PKG_HEAD))

字符串操作 append assgin replac erase data size等操作

m_pkgData.assign(pszPkgData, iLen);

m_pkgData.replace(sizeof(PKG_HEAD), std::string::npos,  pszBody, iBodyLen);

m_pkgData.append(reinterpret_cast<const char*>(pszData), wLen);

m_pkgData.erase();

memcpy(&wVal, m_pkgData.data() + sizeof(PKG_HEAD) + m_iPos, sizeof(wVal));

m_pkgData.size() - sizeof(PKG_HEAD) - m_iPos

operator的使用

    this_type& operator >> (unsigned short& wVal) {

        ...

        return *this;
    }

模板的使用

    template<typename TVal>
    this_type& operator << (const TVal& tVal) {
        m_pkgData.append(reinterpret_cast<const char*>(&tVal), sizeof(tVal));
        return *this;
    }

64位大端小端处理

#ifndef WIN32
#if __BYTE_ORDER == __BIG_ENDIAN
#define ntohll(x)       (x)
#define htonll(x)       (x)
#elif __BYTE_ORDER == __LITTLE_ENDIAN
#define ntohll(x)       __bswap_64 (x)
#define htonll(x)       __bswap_64 (x)
#endif
#endif

BUILD_BUG_ON处理

#define BUILD_BUG_ON(condition) ((void)sizeof(char[1 - 2*!!(condition)]))

//使用
BUILD_BUG_ON(sizeof(ZERO_HEAD));

发表评论

电子邮件地址不会被公开。 必填项已用*标注