完成了实时数据的接收和组装字节流
This commit is contained in:
@@ -792,10 +792,419 @@ private:
|
||||
}
|
||||
};
|
||||
|
||||
//<2F><><EFBFBD>㱨<EFBFBD><E3B1A8>֡<EFBFBD><D6A1><EFBFBD><EFBFBD> 1֡1024Ϊ1K
|
||||
//<2F><><EFBFBD>㱨<EFBFBD><E3B1A8>֡<EFBFBD><D6A1><EFBFBD><EFBFBD> 1֡1024Ϊ1K ͳ<><CDB3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
constexpr int PqDataLen = tagPqData::GetSize();
|
||||
constexpr int Stat_PacketNum = (PqDataLen / 1024 > 0) ? (PqDataLen / 1024 + 1) : (PqDataLen / 1024);
|
||||
|
||||
//ʵʱ<CAB5><CAB1><EFBFBD>ݽṹ<DDBD><E1B9B9>1<EFBFBD>ֽڶ<D6BD><DAB6>룩
|
||||
#pragma pack(push, 1)
|
||||
class RealtagPqDate_float {
|
||||
public:
|
||||
tagTime time; // ʱ<><CAB1>
|
||||
|
||||
//ʵʱ<CAB5><CAB1><EFBFBD>ݸ<EFBFBD><DDB8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
std::array<float, 9> Rms; //<2F><><EFBFBD><EFBFBD>ѹ<EFBFBD><D1B9><EFBFBD>ߵ<EFBFBD>ѹ<EFBFBD><D1B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Чֵ
|
||||
std::array<float, 6> UU_Deviation; //<2F><><EFBFBD><EFBFBD>ѹ<EFBFBD><D1B9><EFBFBD>ߵ<EFBFBD>ѹ<EFBFBD><D1B9>ƫ<EFBFBD><C6AB>
|
||||
std::array<float, 6> UL_Deviation; //<2F><><EFBFBD><EFBFBD>ѹ<EFBFBD><D1B9><EFBFBD>ߵ<EFBFBD>ѹ<EFBFBD><D1B9>ƫ<EFBFBD><C6AB>
|
||||
std::array<float, 6> THD; //<2F><>ѹ<EFBFBD><D1B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
std::array<float, 2> FREQ; //Ƶ<>ʼ<EFBFBD>Ƶ<EFBFBD><C6B5>ƫ<EFBFBD><C6AB>
|
||||
std::array<std::array<float, 5>, 2> UI_Seq;//<2F><>ѹ<EFBFBD><D1B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƽ<EFBFBD><C6BD><EFBFBD><EFBFBD>
|
||||
std::array<std::array<float, 3>, 4> TOTAL_POWER;//<2F><><EFBFBD>༰<EFBFBD>ܹ<EFBFBD><DCB9><EFBFBD>P<EFBFBD><50>Q<EFBFBD><51>S
|
||||
std::array<float, 4> COS_PF; //<2F><><EFBFBD>ڹ<EFBFBD><DAB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
std::array<float, 4> COS_DF; //λ<>ƹ<EFBFBD><C6B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//----------- <20><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
std::array<std::array<float, HARMNUM>, 3> HARMV;//г<><D0B3><EFBFBD><EFBFBD>ѹ<EFBFBD><D1B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//----------- <20><><EFBFBD>Ķ<EFBFBD><C4B6><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
std::array<std::array<float, HARMNUM>, 3> HARMI;//г<><D0B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ
|
||||
//----------- <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
std::array<std::array<float, HARMNUM>, 3> HARMVP;//г<><D0B3><EFBFBD><EFBFBD>ѹ<EFBFBD><D1B9>λ
|
||||
//----------- <20><><EFBFBD><EFBFBD><EFBFBD>İ<EFBFBD><C4B0><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
std::array<std::array<float, HARMNUM>, 3> HARMIP;//г<><D0B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ
|
||||
//----------- <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
std::array<std::array<float, HARMNUM>, 3> INHARMV;//<2F><>г<EFBFBD><D0B3><EFBFBD><EFBFBD>ѹ<EFBFBD><D1B9>ֵ
|
||||
//----------- <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
// <20><><EFBFBD>캯<EFBFBD><ECBAAF> - <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
RealtagPqDate_float() {
|
||||
// <20><>ʼ<EFBFBD><CABC>ʱ<EFBFBD><CAB1>
|
||||
time = tagTime(); // <20><><EFBFBD><EFBFBD>tagTime<6D><65>Ĭ<EFBFBD>Ϲ<EFBFBD><CFB9>캯<EFBFBD><ECBAAF>
|
||||
|
||||
// <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
Rms.fill(0.0f);
|
||||
UU_Deviation.fill(0.0f);
|
||||
UL_Deviation.fill(0.0f);
|
||||
THD.fill(0.0f);
|
||||
FREQ.fill(0.0f);
|
||||
COS_PF.fill(0.0f);
|
||||
COS_DF.fill(0.0f);
|
||||
|
||||
// <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>ά<EFBFBD><CEAC><EFBFBD><EFBFBD>
|
||||
for (auto& arr : UI_Seq) {
|
||||
arr.fill(0.0f);
|
||||
}
|
||||
for (auto& arr : TOTAL_POWER) {
|
||||
arr.fill(0.0f);
|
||||
}
|
||||
|
||||
// <20><>ʼ<EFBFBD><CABC>г<EFBFBD><D0B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
for (auto& arr : HARMV) {
|
||||
arr.fill(0.0f);
|
||||
}
|
||||
for (auto& arr : HARMI) {
|
||||
arr.fill(0.0f);
|
||||
}
|
||||
for (auto& arr : HARMVP) {
|
||||
arr.fill(0.0f);
|
||||
}
|
||||
for (auto& arr : HARMIP) {
|
||||
arr.fill(0.0f);
|
||||
}
|
||||
for (auto& arr : INHARMV) {
|
||||
arr.fill(0.0f);
|
||||
}
|
||||
}
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֽ<EFBFBD><D6BD><EFBFBD><EFBFBD><EFBFBD>ȡfloat
|
||||
float read_net_float(const uint8_t* ptr) {
|
||||
uint32_t temp;
|
||||
memcpy(&temp, ptr, sizeof(uint32_t));
|
||||
temp = ntohl(temp);
|
||||
float result;
|
||||
memcpy(&result, &temp, sizeof(float));
|
||||
return result;
|
||||
}
|
||||
|
||||
// ʵʱ<CAB5><CAB1><EFBFBD>ݽṹ<DDBD>ķְ<C4B7><D6B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
bool ParsePacket1(const uint8_t* data, size_t size) {
|
||||
// <20><>С<EFBFBD><D0A1><EFBFBD><EFBFBD> = ʱ<><CAB1>(12<31>ֽ<EFBFBD>) + <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(59<35><39>float * 4 = 236<33>ֽ<EFBFBD>) = 248<34>ֽ<EFBFBD>
|
||||
const size_t min_size = tagTime::GetSize() + 59 * sizeof(float);
|
||||
if (size < min_size) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// <20><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
|
||||
if (!time.SetStructBuf(data, size)) {
|
||||
return false;
|
||||
}
|
||||
const uint8_t* ptr = data + tagTime::GetSize();
|
||||
|
||||
// <20><><EFBFBD><EFBFBD>Rms (9<><39>float)
|
||||
for (int i = 0; i < 9; ++i) {
|
||||
Rms[i] = read_net_float(ptr);
|
||||
ptr += sizeof(float);
|
||||
}
|
||||
|
||||
// <20><><EFBFBD><EFBFBD>UU_Deviation (6<><36>float)
|
||||
for (int i = 0; i < 6; ++i) {
|
||||
UU_Deviation[i] = read_net_float(ptr);
|
||||
ptr += sizeof(float);
|
||||
}
|
||||
|
||||
// <20><><EFBFBD><EFBFBD>UL_Deviation (6<><36>float)
|
||||
for (int i = 0; i < 6; ++i) {
|
||||
UL_Deviation[i] = read_net_float(ptr);
|
||||
ptr += sizeof(float);
|
||||
}
|
||||
|
||||
// <20><><EFBFBD><EFBFBD>THD (6<><36>float)
|
||||
for (int i = 0; i < 6; ++i) {
|
||||
THD[i] = read_net_float(ptr);
|
||||
ptr += sizeof(float);
|
||||
}
|
||||
|
||||
// <20><><EFBFBD><EFBFBD>FREQ (2<><32>float)
|
||||
for (int i = 0; i < 2; ++i) {
|
||||
FREQ[i] = read_net_float(ptr);
|
||||
ptr += sizeof(float);
|
||||
}
|
||||
|
||||
// <20><><EFBFBD><EFBFBD>UI_Seq (2x5<78><35>float)
|
||||
for (int i = 0; i < 2; ++i) {
|
||||
for (int j = 0; j < 5; ++j) {
|
||||
UI_Seq[i][j] = read_net_float(ptr);
|
||||
ptr += sizeof(float);
|
||||
}
|
||||
}
|
||||
|
||||
// <20><><EFBFBD><EFBFBD>TOTAL_POWER (4x3<78><33>float)
|
||||
for (int i = 0; i < 4; ++i) {
|
||||
for (int j = 0; j < 3; ++j) {
|
||||
TOTAL_POWER[i][j] = read_net_float(ptr);
|
||||
ptr += sizeof(float);
|
||||
}
|
||||
}
|
||||
|
||||
// <20><><EFBFBD><EFBFBD>COS_PF (4<><34>float)
|
||||
for (int i = 0; i < 4; ++i) {
|
||||
COS_PF[i] = read_net_float(ptr);
|
||||
ptr += sizeof(float);
|
||||
}
|
||||
|
||||
// <20><><EFBFBD><EFBFBD>COS_DF (4<><34>float)
|
||||
for (int i = 0; i < 4; ++i) {
|
||||
COS_DF[i] = read_net_float(ptr);
|
||||
ptr += sizeof(float);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool ParsePacket2(const uint8_t* data, size_t size) {
|
||||
// <20><>С<EFBFBD><D0A1><EFBFBD><EFBFBD> = ʱ<><CAB1>(12<31>ֽ<EFBFBD>) + г<><D0B3><EFBFBD><EFBFBD>ѹ(150<35><30>float * 4 = 600<30>ֽ<EFBFBD>) = 612<31>ֽ<EFBFBD>
|
||||
const size_t min_size = tagTime::GetSize() + 3 * HARMNUM * sizeof(float);
|
||||
if (size < min_size) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// <20><><EFBFBD><EFBFBD>ʱ<EFBFBD>䣨<EFBFBD><E4A3A8><EFBFBD><EFBFBD>֮ǰ<D6AE><C7B0>ʱ<EFBFBD>䣩
|
||||
if (!time.SetStructBuf(data, size)) {
|
||||
return false;
|
||||
}
|
||||
const uint8_t* ptr = data + tagTime::GetSize();
|
||||
|
||||
// <20><><EFBFBD><EFBFBD>HARMV (3xHARMNUM<55><4D>float)
|
||||
for (int i = 0; i < 3; ++i) {
|
||||
for (int j = 0; j < HARMNUM; ++j) {
|
||||
HARMV[i][j] = read_net_float(ptr);
|
||||
ptr += sizeof(float);
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool ParsePacket3(const uint8_t* data, size_t size) {
|
||||
// <20><>С<EFBFBD><D0A1><EFBFBD><EFBFBD> = ʱ<><CAB1>(12<31>ֽ<EFBFBD>) + г<><D0B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(150<35><30>float * 4 = 600<30>ֽ<EFBFBD>) = 612<31>ֽ<EFBFBD>
|
||||
const size_t min_size = tagTime::GetSize() + 3 * HARMNUM * sizeof(float);
|
||||
if (size < min_size) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!time.SetStructBuf(data, size)) {
|
||||
return false;
|
||||
}
|
||||
const uint8_t* ptr = data + tagTime::GetSize();
|
||||
|
||||
// <20><><EFBFBD><EFBFBD>HARMI (3xHARMNUM<55><4D>float)
|
||||
for (int i = 0; i < 3; ++i) {
|
||||
for (int j = 0; j < HARMNUM; ++j) {
|
||||
HARMI[i][j] = read_net_float(ptr);
|
||||
ptr += sizeof(float);
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool ParsePacket4(const uint8_t* data, size_t size) {
|
||||
// <20><>С<EFBFBD><D0A1><EFBFBD><EFBFBD> = ʱ<><CAB1>(12<31>ֽ<EFBFBD>) + г<><D0B3><EFBFBD><EFBFBD>ѹ<EFBFBD><D1B9>λ(150<35><30>float * 4 = 600<30>ֽ<EFBFBD>) = 612<31>ֽ<EFBFBD>
|
||||
const size_t min_size = tagTime::GetSize() + 3 * HARMNUM * sizeof(float);
|
||||
if (size < min_size) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!time.SetStructBuf(data, size)) {
|
||||
return false;
|
||||
}
|
||||
const uint8_t* ptr = data + tagTime::GetSize();
|
||||
|
||||
// <20><><EFBFBD><EFBFBD>HARMVP (3xHARMNUM<55><4D>float)
|
||||
for (int i = 0; i < 3; ++i) {
|
||||
for (int j = 0; j < HARMNUM; ++j) {
|
||||
HARMVP[i][j] = read_net_float(ptr);
|
||||
ptr += sizeof(float);
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool ParsePacket5(const uint8_t* data, size_t size) {
|
||||
// <20><>С<EFBFBD><D0A1><EFBFBD><EFBFBD> = ʱ<><CAB1>(12<31>ֽ<EFBFBD>) + г<><D0B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ(150<35><30>float * 4 = 600<30>ֽ<EFBFBD>) = 612<31>ֽ<EFBFBD>
|
||||
const size_t min_size = tagTime::GetSize() + 3 * HARMNUM * sizeof(float);
|
||||
if (size < min_size) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!time.SetStructBuf(data, size)) {
|
||||
return false;
|
||||
}
|
||||
const uint8_t* ptr = data + tagTime::GetSize();
|
||||
|
||||
// <20><><EFBFBD><EFBFBD>HARMIP (3xHARMNUM<55><4D>float)
|
||||
for (int i = 0; i < 3; ++i) {
|
||||
for (int j = 0; j < HARMNUM; ++j) {
|
||||
HARMIP[i][j] = read_net_float(ptr);
|
||||
ptr += sizeof(float);
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool ParsePacket6(const uint8_t* data, size_t size) {
|
||||
// <20><>С<EFBFBD><D0A1><EFBFBD><EFBFBD> = ʱ<><CAB1>(12<31>ֽ<EFBFBD>) + <20><>г<EFBFBD><D0B3><EFBFBD><EFBFBD>ѹ(150<35><30>float * 4 = 600<30>ֽ<EFBFBD>) = 612<31>ֽ<EFBFBD>
|
||||
const size_t min_size = tagTime::GetSize() + 3 * HARMNUM * sizeof(float);
|
||||
if (size < min_size) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!time.SetStructBuf(data, size)) {
|
||||
return false;
|
||||
}
|
||||
const uint8_t* ptr = data + tagTime::GetSize();
|
||||
|
||||
// <20><><EFBFBD><EFBFBD>INHARMV (3xHARMNUM<55><4D>float)
|
||||
for (int i = 0; i < 3; ++i) {
|
||||
for (int j = 0; j < HARMNUM; ++j) {
|
||||
INHARMV[i][j] = read_net_float(ptr);
|
||||
ptr += sizeof(float);
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
// <20><><EFBFBD>㸡<EFBFBD><E3B8A1><EFBFBD>ֶ<EFBFBD><D6B6><EFBFBD><EFBFBD><EFBFBD>
|
||||
size_t CalculateFloatCount() const {
|
||||
size_t count = 0;
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
count += Rms.size();
|
||||
count += UU_Deviation.size();
|
||||
count += UL_Deviation.size();
|
||||
count += THD.size();
|
||||
count += FREQ.size();
|
||||
count += COS_PF.size();
|
||||
count += COS_DF.size();
|
||||
|
||||
// <20><>ά<EFBFBD><CEAC><EFBFBD><EFBFBD>
|
||||
for (const auto& arr : UI_Seq) count += arr.size();
|
||||
for (const auto& arr : TOTAL_POWER) count += arr.size();
|
||||
for (const auto& arr : HARMV) count += arr.size();
|
||||
for (const auto& arr : HARMI) count += arr.size();
|
||||
for (const auto& arr : HARMVP) count += arr.size();
|
||||
for (const auto& arr : HARMIP) count += arr.size();
|
||||
for (const auto& arr : INHARMV) count += arr.size();
|
||||
|
||||
return count;
|
||||
}
|
||||
|
||||
// <20><><EFBFBD>л<EFBFBD><D0BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD><DDB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
void SerializeFloats(std::vector<float>& buffer) const {
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
for (float val : Rms) buffer.push_back(val);
|
||||
for (float val : UU_Deviation) buffer.push_back(val);
|
||||
for (float val : UL_Deviation) buffer.push_back(val);
|
||||
for (float val : THD) buffer.push_back(val);
|
||||
for (float val : FREQ) buffer.push_back(val);
|
||||
|
||||
// <20><>ά<EFBFBD><CEAC><EFBFBD>飨<EFBFBD><E9A3A8>ѹ<EFBFBD><D1B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
for (const auto& arr : UI_Seq) {
|
||||
for (float val : arr) buffer.push_back(val);
|
||||
}
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
for (const auto& arr : TOTAL_POWER) {
|
||||
for (float val : arr) buffer.push_back(val);
|
||||
}
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
for (float val : COS_PF) buffer.push_back(val);
|
||||
for (float val : COS_DF) buffer.push_back(val);
|
||||
|
||||
// г<><D0B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
for (const auto& arr : HARMV) {
|
||||
for (float val : arr) buffer.push_back(val);
|
||||
}
|
||||
for (const auto& arr : HARMI) {
|
||||
for (float val : arr) buffer.push_back(val);
|
||||
}
|
||||
for (const auto& arr : HARMVP) {
|
||||
for (float val : arr) buffer.push_back(val);
|
||||
}
|
||||
for (const auto& arr : HARMIP) {
|
||||
for (float val : arr) buffer.push_back(val);
|
||||
}
|
||||
for (const auto& arr : INHARMV) {
|
||||
for (float val : arr) buffer.push_back(val);
|
||||
}
|
||||
}
|
||||
|
||||
// Base64<36><34><EFBFBD>뺯<EFBFBD><EBBAAF><EFBFBD><EFBFBD><EFBFBD><EFBFBD>tagPqData_Float<61><74>ͬ<EFBFBD><CDAC>
|
||||
static std::string base64_encode(const unsigned char* bytes_to_encode, size_t in_len) {
|
||||
static const char base64_chars[] =
|
||||
"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
|
||||
"abcdefghijklmnopqrstuvwxyz"
|
||||
"0123456789+/";
|
||||
|
||||
std::string ret;
|
||||
int i = 0;
|
||||
int j = 0;
|
||||
unsigned char char_array_3[3];
|
||||
unsigned char char_array_4[4];
|
||||
|
||||
while (in_len--) {
|
||||
char_array_3[i++] = *(bytes_to_encode++);
|
||||
if (i == 3) {
|
||||
char_array_4[0] = (char_array_3[0] & 0xfc) >> 2;
|
||||
char_array_4[1] = ((char_array_3[0] & 0x03) << 4) +
|
||||
((char_array_3[1] & 0xf0) >> 4);
|
||||
char_array_4[2] = ((char_array_3[1] & 0x0f) << 2) +
|
||||
((char_array_3[2] & 0xc0) >> 6);
|
||||
char_array_4[3] = char_array_3[2] & 0x3f;
|
||||
|
||||
for (i = 0; i < 4; i++)
|
||||
ret += base64_chars[char_array_4[i]];
|
||||
i = 0;
|
||||
}
|
||||
}
|
||||
|
||||
if (i) {
|
||||
for (j = i; j < 3; j++)
|
||||
char_array_3[j] = '\0';
|
||||
|
||||
char_array_4[0] = (char_array_3[0] & 0xfc) >> 2;
|
||||
char_array_4[1] = ((char_array_3[0] & 0x03) << 4) +
|
||||
((char_array_3[1] & 0xf0) >> 4);
|
||||
char_array_4[2] = ((char_array_3[1] & 0x0f) << 2) +
|
||||
((char_array_3[2] & 0xc0) >> 6);
|
||||
char_array_4[3] = char_array_3[2] & 0x3f;
|
||||
|
||||
for (j = 0; j < i + 1; j++)
|
||||
ret += base64_chars[char_array_4[j]];
|
||||
|
||||
while (i++ < 3)
|
||||
ret += '=';
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
// <20><><EFBFBD><EFBFBD>Base64ת<34><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
std::string ConvertToBase64() const {
|
||||
// 1. <20><><EFBFBD><EFBFBD><EFBFBD>ܸ<EFBFBD><DCB8><EFBFBD><EFBFBD><EFBFBD>
|
||||
const size_t total_floats = CalculateFloatCount();
|
||||
|
||||
// 2. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
std::vector<float> float_buffer;
|
||||
float_buffer.reserve(total_floats);
|
||||
SerializeFloats(float_buffer);
|
||||
|
||||
// 3. ת<><D7AA>Ϊ<EFBFBD>ֽ<EFBFBD><D6BD><EFBFBD><EFBFBD>ݲ<EFBFBD><DDB2><EFBFBD><EFBFBD><EFBFBD>
|
||||
const size_t byte_size = float_buffer.size() * sizeof(float);
|
||||
const unsigned char* byte_data =
|
||||
reinterpret_cast<const unsigned char*>(float_buffer.data());
|
||||
|
||||
return base64_encode(byte_data, byte_size);
|
||||
}
|
||||
};
|
||||
#pragma pack(pop)
|
||||
// <20><><EFBFBD>ɴ<EFBFBD>Э<EFBFBD><D0AD>ͷ<EFBFBD>Ķ<EFBFBD><C4B6><EFBFBD><EFBFBD>Ʊ<EFBFBD><C6B1><EFBFBD>
|
||||
std::vector<unsigned char> generate_binary_message(
|
||||
uint16_t msg_type,
|
||||
|
||||
Reference in New Issue
Block a user