C++ 组包处理学习记录
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));