c++ - 如何重用对象,但参数不同?
问题描述
我在 ESP32 上制作了一个带有服务器和 Web 界面的韦根计算器。
我的问题是,每次我输入另一个小数时,我都必须创建另一个对象,我不确定这是否安全,因为 ESP32 上的内存量有限,而且我不认为永远创建对象是最佳实践。
我有一个带有构造函数的类,该构造函数获取十进制数并将其转换为 Wiegand 26 位二进制数:
class Wiegand {
private:
std::vector<bool> wiegandArray = std::vector<bool>(26, false);
uint8_t facilityCode;
uint16_t cardNumber;
void calculate(uint32_t dec) {
// transform dec number into binary number using single bit shift operation
// and store it in wiegandArray[]
for (int i = 24; i > 0; --i) {
wiegandArray[i] = dec & 1;
dec >>= 1;
}
// check for parity of the first 12 bits
bool even = 0;
for(int i = 1; i < 13; i++) {
even ^= wiegandArray[i];
}
// add 0 or 1 as first bit (leading parity bit - even) based on the number of 'ones' in the first 12 bits
wiegandArray[0] = even;
// check for parity of the last 12 bits
bool odd = 1;
for(int i = 13; i < 25; i++) {
odd ^= wiegandArray[i];
}
// add 0 or 1 as last bit (trailing parity bit - odd) based on the number of 'ones' in the last 12 bits
wiegandArray[25] = odd;
}
public:
Wiegand(uint32_t id) {
calculate(id);
facilityCode = id >> 16;
cardNumber = id & 0xffff;
}
//returns a 26 length std::vector<bool>
std::vector<bool> getWiegandBinary() {
return wiegandArray;
}
};
每次我得到一个新的十进制数时,我都会调用该构造函数:
std::vector<bool> _array;
void setup() {
//server initialization
//check for web parameters
if(p->name() == "getWiegand") {
String wiegandID = p->value();
Wiegand card(wiegandID.toInt());
_array = card.getWiegandBinary();
change = true;
}
}
void loop() {
if(change) {
change = false;
for(int i = 0; i<26; i++) {
Serial.print(_array[i]);
}
}
}
此外,使用类进行这种转换实际上会使 ESP 上的事情变得更加困难。
每次在内部获得新值时,我都需要创建一个新对象,void setup()
并且该对象不会在 中定义void loop()
,因此我必须使用全局声明的变量,例如_array = card.getWiegandBinary();
,才能getters
从类中访问 。
我应该放弃分类并使用全局声明的函数和变量吗?
解决方案
推荐阅读
- postgresql - 如何使用 Ecto 加入多个存储库?
- firebase - Firebase FCM 使用正确的服务器密钥返回未经授权的错误
- list - F#将在for循环中创建的元素添加到列表中
- java - 签署一个 gradle 插件
- php - 当我在控制器功能中间中止或退出时,Ajax 请求被 Cors 阻止
- javascript - 根据选择的选项更改存在规则
- java - Java & MySQL - setBoolean() 方法出错
- django - 使用带有注解的 Django CheckConstraint
- python - 读取每个 url 并将其保存到单独的 pdf Python
- xamarin - 从一个详细信息页面到另一个详细信息页面时如何保存页面上的信息