if (iter->second == "M")//大端 { for (int j=0;j < (int)vecUserConfigData[i].size();) { CHAR tszStr[3] = { vecUserConfigData[i][j], vecUserConfigData[i][j+1], '\0' }; BYTE byValue = (BYTE)strtoul(tszStr, NULL, 16); sCSVSegmentConfig.vecData.push_back(byValue); j += 2; }
时间: 2024-04-28 20:26:56 浏览: 22
这段代码的意思是,首先判断映射容器 mapFlashAddr 中的第 i 个元素的地址类型是否为 "M",即大端模式。如果是,则遍历向量容器 vecUserConfigData 中第 i 个元素中的所有字符,每两个字符作为一组,将其转换为 BYTE 类型的值,并将这个值添加到 CSVSegmentConfig 类型的对象 sCSVSegmentConfig 的成员变量 vecData 中。其中,CHAR tszStr[3] 定义了一个长度为 3 的字符数组,用于存储每两个字符组成的字符串;strtoul 函数用于将字符串转换为无符号长整型数,第一个参数为需要转换的字符串,第二个参数为转换后不需要的部分,这里设置为 NULL,第三个参数为转换的进制,这里设置为 16。转换后的结果为 BYTE 类型,即无符号字符类型。
相关问题
else if (iter->second == "L")//小端 { for (int j = vecUserConfigData[i].size() - 1;j >=0;) { CHAR tszStr[3] = { vecUserConfigData[i][j - 1], vecUserConfigData[i][j], '\0' }; BYTE byValue = (BYTE)strtoul(tszStr, NULL, 16); sCSVSegmentConfig.vecData.push_back(byValue); j -= 2; } }
这段代码的意思是,如果映射容器 mapFlashAddr 中的第 i 个元素的地址类型为 "L",即小端模式,则遍历向量容器 vecUserConfigData 中第 i 个元素中的所有字符,每两个字符作为一组,将其转换为 BYTE 类型的值,并将这个值添加到 CSVSegmentConfig 类型的对象 sCSVSegmentConfig 的成员变量 vecData 中。不同的是,这里是从后往前遍历向量容器中的元素,每次取出两个字符组成的字符串,并将其转换为 BYTE 类型的值。其中,CHAR tszStr[3] 定义了一个长度为 3 的字符数组,用于存储每两个字符组成的字符串;strtoul 函数用于将字符串转换为无符号长整型数,第一个参数为需要转换的字符串,第二个参数为转换后不需要的部分,这里设置为 NULL,第三个参数为转换的进制,这里设置为 16。转换后的结果为 BYTE 类型,即无符号字符类型。
给下面每一行代码给上注释#include "pch.h" #include "FinBudgetFlowManager.h" int FinBudgetFlowManager::C(double _value, time_t _time, CString _remark, FlowType _type) { FinBudgetFlow* pFBD = new FinBudgetFlow(); pFBD->setValue(_value); pFBD->setTime(_time); pFBD->setRemark(_remark); pFBD->setType(_type);; this->FlowMap.insert(std::map<int, FinBudgetFlow*>::value_type(this->getSize(), pFBD)); return this->getSize()-1; } bool FinBudgetFlowManager::U(int _index, double _value, time_t _time, CString _remark, FlowType _type){ std::map<int, FinBudgetFlow*>::iterator iter; iter = this->FlowMap.find(_index); if (iter != this->FlowMap.end()) { delete iter->second; iter->second = NULL; this->FlowMap.erase(iter); FinBudgetFlow *pFBD = new FinBudgetFlow(); pFBD->setValue(_value); pFBD->setTime(_time); pFBD->setRemark(_remark); pFBD->setType(_type); this->FlowMap.insert(std::map<int, FinBudgetFlow*>::value_type(_index, pFBD)); return true; } else { throw _index; } } FinBudgetFlow* FinBudgetFlowManager::R(int _index) { std::map<int, FinBudgetFlow*>::iterator iter; iter = this->FlowMap.find(_index); if (iter != this->FlowMap.end()) { return iter->second; } else { throw _index; } } bool FinBudgetFlowManager::D(int _index) { std::map<int, FinBudgetFlow*>::iterator iter; iter = this->FlowMap.find(_index); if (iter != this->FlowMap.end()) { delete iter->second; iter->second = NULL; //防止野指针这一步是否真的需要? this->FlowMap.erase(iter); return true; } else { throw _index; } } int FinBudgetFlowManager::getSize() { return FlowMap.size(); }
//引入预编译头文件
#include "pch.h"
//引入头文件"FinBudgetFlowManager.h"
#include "FinBudgetFlowManager.h"
//定义函数C,返回类型为int,参数为value,time,remark和type
int FinBudgetFlowManager::C(double _value, time_t _time, CString _remark, FlowType _type) {
//创建一个新的FinBudgetFlow对象
FinBudgetFlow* pFBD = new FinBudgetFlow();
//设置新对象的value
pFBD->setValue(_value);
//设置新对象的time
pFBD->setTime(_time);
//设置新对象的remark
pFBD->setRemark(_remark);
//设置新对象的type
pFBD->setType(_type);;
//将新对象插入到FlowMap中
this->FlowMap.insert(std::map<int, FinBudgetFlow*>::value_type(this->getSize(), pFBD));
//返回FlowMap的大小减一
return this->getSize()-1;
}
//定义函数U,返回类型为bool,参数为index,value,time,remark和type
bool FinBudgetFlowManager::U(int _index, double _value, time_t _time, CString _remark, FlowType _type){
//定义一个迭代器
std::map<int, FinBudgetFlow*>::iterator iter;
//在FlowMap中查找index
iter = this->FlowMap.find(_index);
//如果找到了
if (iter != this->FlowMap.end()) {
//删除原有对象
delete iter->second;
iter->second = NULL;
//从FlowMap中删除原有对象
this->FlowMap.erase(iter);
//创建一个新的FinBudgetFlow对象
FinBudgetFlow *pFBD = new FinBudgetFlow();
//设置新对象的value
pFBD->setValue(_value);
//设置新对象的time
pFBD->setTime(_time);
//设置新对象的remark
pFBD->setRemark(_remark);
//设置新对象的type
pFBD->setType(_type);
//将新对象插入到FlowMap中
this->FlowMap.insert(std::map<int, FinBudgetFlow*>::value_type(_index, pFBD));
//返回true
return true;
}
//如果没有找到
else {
//抛出异常
throw _index;
}
}
//定义函数R,返回类型为FinBudgetFlow*,参数为index
FinBudgetFlow* FinBudgetFlowManager::R(int _index) {
//定义一个迭代器
std::map<int, FinBudgetFlow*>::iterator iter;
//在FlowMap中查找index
iter = this->FlowMap.find(_index);
//如果找到了
if (iter != this->FlowMap.end()) {
//返回找到的对象
return iter->second;
}
//如果没有找到
else {
//抛出异常
throw _index;
}
}
//定义函数D,返回类型为bool,参数为index
bool FinBudgetFlowManager::D(int _index) {
//定义一个迭代器
std::map<int, FinBudgetFlow*>::iterator iter;
//在FlowMap中查找index
iter = this->FlowMap.find(_index);
//如果找到了
if (iter != this->FlowMap.end()) {
//删除对象
delete iter->second;
iter->second = NULL;
//从FlowMap中删除对象
this->FlowMap.erase(iter);
//返回true
return true;
}
//如果没有找到
else {
//抛出异常
throw _index;
}
}
//定义函数getSize,返回类型为int
int FinBudgetFlowManager::getSize() {
//返回FlowMap的大小
return FlowMap.size();
}
阅读全文