#include "Serialize.h"
#include <string.h>
#include <codecvt>
Serialize& Serialize::operator<<(unsigned char value)
{
m_sBuf.sputn((char*)&value, sizeof(unsigned char));
return (*this);
}
Serialize& Serialize::operator<<(short value)
{
char tmp[2] = { 0 };
tmp[0] = (char)(((value & 0xff00) >> 8) & 0xff);
tmp[1] = (char)((value & 0x00ff) & 0xff);
m_sBuf.sputn((char*)&tmp, 2);
return (*this);
// return Make<short>(value);
}
Serialize& Serialize::operator<<(unsigned short value)
{
char tmp[2] = { 0 };
tmp[0] = (char)(((value & 0xff00) >> 8) & 0xff);
tmp[1] = (char)((value & 0x00ff) & 0xff);
m_sBuf.sputn((char*)&tmp, 2);
return (*this);
// return Make<unsigned short>(value);
}
Serialize& Serialize::operator<<(int value)
{
char tmp[4] = { 0 };
tmp[0] = (char)(((value & 0xff000000) >> 24) & 0xff);
tmp[1] = (char)(((value & 0x00ff0000) >> 16) & 0xff);
tmp[2] = (char)(((value & 0x0000ff00) >> 8) & 0xff);
tmp[3] = (char)((value & 0x000000ff) & 0xff);
m_sBuf.sputn((char*)&tmp, 4);
return (*this);
//return Make<int>(value);
}
Serialize& Serialize::operator<<(unsigned int value)
{
char tmp[4] = { 0 };
tmp[0] = (char)(((value & 0xff000000) >> 24) & 0xff);
tmp[1] = (char)(((value & 0x00ff0000) >> 16) & 0xff);
tmp[2] = (char)(((value & 0x0000ff00) >> 8) & 0xff);
tmp[3] = (char)((value & 0x000000ff) & 0xff);
m_sBuf.sputn((char*)&tmp, 4);
return (*this);
// return Make<unsigned int>(value);
}
Serialize& Serialize::operator<<(long long value)
{
//return Make<long long>(value);
char tmp[8] = { 0 };
tmp[0] = (char)(((value & 0xff00000000000000) >> 56) & 0xff);
tmp[1] = (char)(((value & 0x00ff000000000000) >> 48) & 0xff);
tmp[2] = (char)(((value & 0x0000ff0000000000) >> 40) & 0xff);
tmp[3] = (char)(((value & 0x000000ff00000000) >> 32) & 0xff);
tmp[4] = (char)(((value & 0x00000000ff000000) >> 24) & 0xff);
tmp[5] = (char)(((value & 0x0000000000ff0000) >> 16) & 0xff);
tmp[6] = (char)(((value & 0x000000000000ff00) >> 8) & 0xff);
tmp[7] = (char)((value & 0x00000000000000ff) & 0xff);
m_sBuf.sputn((char*)&tmp, 8);
return (*this);
}
Serialize& Serialize::operator<<(unsigned long long value)
{
// return Make<unsigned long long>(value);
char tmp[8] = { 0 };
tmp[0] = (char)(((value & 0xff00000000000000) >> 56) & 0xff);
tmp[1] = (char)(((value & 0x00ff000000000000) >> 48) & 0xff);
tmp[2] = (char)(((value & 0x0000ff0000000000) >> 40) & 0xff);
tmp[3] = (char)(((value & 0x000000ff00000000) >> 32) & 0xff);
tmp[4] = (char)(((value & 0x00000000ff000000) >> 24) & 0xff);
tmp[5] = (char)(((value & 0x0000000000ff0000) >> 16) & 0xff);
tmp[6] = (char)(((value & 0x000000000000ff00) >> 8) & 0xff);
tmp[7] = (char)((value & 0x00000000000000ff) & 0xff);
m_sBuf.sputn((char*)&tmp, 8);
return (*this);
}
Serialize& Serialize::operator<<(float value)
{
return Make<float>(value);
}
Serialize& Serialize::operator<<(double value)
{
return Make<double>(value);
}
Serialize& Serialize::operator<<(const std::string& value)
{
int len = (int)value.length();
(*this) << len;
//int iCount = value.length();
//m_sBuf.sputn((char*)&iCount, sizeof(int));
m_sBuf.sputn(value.c_str(), len);
return (*this);
}
Serialize& Serialize::operator<<(const std::wstring& value)
{
std::wstring_convert<std::codecvt_utf8<wchar_t>> conv;
auto sData = conv.to_bytes(value);
int len = (int)sData.length();
(*this) << len;
m_sBuf.sputn(sData.c_str(), len);
return (*this);
}
Serialize& Serialize::operator<<(bool value)
{
unsigned short usShort = value ? 1 : 0;
(*this) << usShort;
return (*this);
// return Make<unsigned short>(usShort);
}
std::string Serialize::str()
{
return m_sBuf.str();
}
int Serialize::len()
{
return (int)m_sBuf.str().length();
}
void Serialize::ClearBuffer()
{
m_sBuf.str("");
}
UnSerialize::UnSerialize(const std::string& sSrc)
:m_sBuf(sSrc, std::ios_base::in)
, iLen((int)sSrc.length())
{
bSuccess = true;
}
UnSerialize& UnSerialize::operator >> (unsigned char& value)
{
if (!bSuccess)
return (*this);
auto iRet = m_sBuf.sgetn((char*)&value, 1);
if (iRet != 1) {
bSuccess = false;
return (*this);
}
return (*this);
// return Get<unsigned char>(value);
}
UnSerialize& UnSerialize::operator >> (short& value)
{
if (!bSuccess)
return (*this);
char tmp[2] = { 0 };
auto iRet = m_sBuf.sgetn((char*)&tmp, 2);
if (iRet != 2) {
bSuccess = false;
return (*this);
}
int i1 = (((char)tmp[0]) << 8) & 0xFF00;
int i2 = ((char)tmp[1]) & 0x00FF;
int ret = i1 | i2 ;
value = ret;
return (*this);
// return Get<short>(value);
}
UnSerialize& UnSerialize::operator >> (unsigned short& value)
{
if (!bSuccess)
return (*this);
char tmp[2] = { 0 };
auto iRet = m_sBuf.sgetn((char*)&tmp, 2);
if (iRet != 2) {
bSuccess = false;
return (*this);
}
int i1 = (((char)tmp[0]) << 8) & 0xFF00;
int i2 = ((char)tmp[1]) & 0x00FF;
int ret = i1 | i2;
value = ret;
return (*this);
// return Get<unsigned short>(value);
}
UnSerialize& UnSerialize::operator >> (int& value)
{
if (!bSuccess)
return (*this);
char tmp[4] = { 0 };
auto iRet = m_sBuf.sgetn((char*)&tmp, 4);
if (iRet != 4)
{
bSuccess = false;
return (*this);
}
int i1 = (((char)tmp[0]) << 24)&0xFF000000;
int i2 = (((char)tmp[1]) << 16)&0x00FF0000;
int i3 = (((char)tmp[2]) << 8)& 0x0000FF00;
int i4 = ((char)tmp[3])& 0x000000FF;
//int ret = (int)(((byte)tmp[0] << 24 )| ((char)tmp[1] << 16 )| ((char)tmp[2] << 8) | ((char)tmp[3]));
int ret = i1 | i2 | i3 | i4;
value = ret;
return (*this);
//return Get<int>(value);
}
UnSerialize& UnSerialize::operator >> (unsigned int& value)
{
if (!bSuccess)
return (*this);
char tmp[4] = { 0 };
auto iRet = m_sBuf.sgetn((char*)&tmp, 4);
if (iRet != 4) {
bSuccess = false;
return (*this);
}
int i1 = (((char)tmp[0]) << 24) & 0xFF000000;
int i2 = (((char)tmp[1]) << 16) & 0x00FF0000;
int i3 = (((char)tmp[2]) << 8) & 0x0000FF00;
int i4 = ((char)tmp[3]) & 0x000000FF;
//int ret = (int)(((byte)tmp[0] << 24 )| ((char)tmp[1] << 16 )| ((char)tmp[2] << 8) | ((char)tmp[3]));
int ret = i1 | i2 | i3 | i4;
value = ret;
return (*this);
// return Get<unsigned int>(value);
}
UnSerialize& UnSerialize::operator>>(long long& value)
{
if (!bSuccess)
return (*this);
char tmp[8] = { 0 };
auto iRet = m_sBuf.sgetn((char*)&tmp, 8);
if (iRet != 8)
{
bSuccess = false;
return (*this);
}
long long i1 = (((long long)tmp[0]) << 56) & 0xFF00000000000000;
long long i2 = (((long long)tmp[1]) << 48) & 0x00FF000000000000;
long long i3 = (((long long)tmp[2]) << 40) & 0x0000FF0000000000;
long long i4 = (((long long)tmp[3]) << 32) & 0x000000FF00000000;
long long i5 = (((long long)tmp[4]) << 24) & 0x00000000FF000000;
long long i6 = (((long long)tmp[5]) << 16) & 0x0000000000FF0000;
long long i7 = (((long long)tmp[6]) << 8) & 0x000000000000FF00;
long long i8 = ((long long)tmp[7]) & 0x00000000000000FF;
//int ret = (int)(((byte)tmp[0] << 24 )| ((char)tmp[1] << 16 )| ((char)tmp[2] << 8) | ((char)tmp[3]));
long long ret = i1 | i2 | i3 | i4 | i5 | i6 | i7 | i8;
value = ret;
return (*this);
//return Get<long long>(value);
}
UnSerialize& UnSerialize::operator>>(unsigned long long& value)
{
if (!bSuccess)
return (*this);
char tmp[8] = { 0 };
auto iRet = m_sBuf.sgetn((char*)&tmp, 8);
if (iRet != 8)
{
bSuccess = false;
return (*this);
}
unsigned long long i1 = (((unsigned long long)tmp[0]) << 56) & 0xFF00000000000000;
unsigned long long i2 = (((unsigned long long)tmp[1]) << 48) & 0x00FF000000000000;
unsigned long long i3 = (((unsigned long long)tmp[2]) << 40) & 0x0000FF0000000000;
unsigned long long i4 = (((unsigned long long)tmp[3]) << 32) & 0x000000FF00000000;
unsigned long long i5 = (((unsigned long long)
极简风格快速处理序列化与反序列化 C++ 11 C++20 测试及代码实现工程文件
需积分: 0 137 浏览量
2024-02-18
14:59:24
上传
评论
收藏 5KB RAR 举报
优秀会上瘾
- 粉丝: 123
- 资源: 6
最新资源
- IMG_0694.GIF
- 基于图像的三维模型重建C++源代码+文档说明(高分课程设计)
- 基于聚焦法的工件立体测量方案,根据数据进行三维重建 使用HALCON处理图像,MATLAB拟合数据+源代码+数据集+效果图
- 锄战三国村 修改:货币使用不减 v1.10(2) 原创 (中文).apk
- 基于python实现的单目双目视觉三维重建+源代码+图像图片(高分课程设计)
- 基于C+++OPENCV的全景图像拼接源码(课程设计)
- 基于Python+OpenCV对多张图片进行全景图像拼接,消除鬼影,消除裂缝+源代码+文档说明+界面截图(高分课程设计)
- 基于C++实现的全景图像拼接源码(课程设计)
- 基于SIFT特征点提取和RASIC算法实现全景图像拼接python源码+文档说明+界面截图+详细注释(95分以上课程大作业)
- 基于matlab实现眼部判别的疲劳检测系统+源代码+全部数据+文档说明+详细注释+使用说明+截图(高分课程设计)
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈