我正在尝试将一个字符(仅包含 0/1)转换为一个向量,其中每个单个字符都存储为整数。 他使用 Arduino 的 Vector 库,该库的文档记录不如基本的 c++ STL。 这是函数:
void reception_emission(char* message) {
Vector <int> integers;
Serial.println(message);
Serial.println("suite");
// Convertir la chaîne de caractères en un vecteur d'entiers
for (int i = 0; i<strlen(message); ++i) {
if (message[i] == '0' || message[i] == '1') {
//integers.push_back(message[i] - '0')
Serial.println(message[i]);
Serial.println("!!");
const int nb=message[i] - '0';
Serial.println(nb);
Serial.println("////");
integers.push_back(nb);
} // Convertir le caractère en entier
}
Serial.print("size: ");
Serial.println(integers.size());
// Appeler la fonction emission pour chaque entier dans le vecteur
for (int i = 0; i < integers.size(); ++i) {
//Serial.println(char(integers[i]));
emission(laserPin, micros(), integers[i]);
void_blank(laserPin, micros());
}
}
我用 :
来称呼它reception_emission("01001010101");
我打印了很多输出来看看到底是什么问题。 在串行监视器上,我有:
0
!!
0
////
0
!!
0
////
1
!!
1
////
0
!!
0
////
1
!!
1
////
0
!!
0
////
1
!!
1
////
0
!!
0
////
1
!!
1
////
size: 0
这意味着:每个字符都很好地转换为整数并存储在“nb”中。
但是,最后你可以看到向量interger仍然是空的。
那么,这里有什么问题呢? 还没有找到任何东西。
谢谢你。
与
std::vector
不同,Vector
不提供自己的内存存储。你必须自己给它存储空间。
根据自述文件https://github.com/janelia-arduino/Vector/tree/master:
类似于C++的序列容器
,但该容器不是动态分配内存,而是指向外部静态分配的C风格数组。最大大小在编译时是固定的,但可以通过推送来更改大小并从向量中弹出元素。静态内存分配用于避免非常小的嵌入式处理器上的动态分配问题。必须注意不要取消引用空向量、越界访问元素,或在不设置存储数组的情况下使用。std::vector
因此,您的
integers
向量始终为空,因为它没有任何内容可存储其值。
尝试更多类似这样的事情:
void reception_emission(char* message) {
const int ELEMENT_COUNT_MAX = ...; // whatever max size is reasonable for your neeeds...
int storage_array[ELEMENT_COUNT_MAX];
Vector <int> integers(storage_array);
int len = strlen(message);
for (int i = 0; i < len; ++i) {
if (message[i] == '0' || message[i] == '1') {
Serial.println(message[i]);
Serial.println("!!");
const int nb = message[i] - '0';
Serial.println(nb);
Serial.println("////");
integers.push_back(nb);
}
}
Serial.print("size: ");
Serial.println(integers.size());
for (int i = 0; i < integers.size(); ++i) {
//Serial.println(char(integers[i]));
emission(laserPin, micros(), integers[i]);
void_blank(laserPin, micros());
}
}