将 Lora.read() 转储到数组
Dump Lora.read() to array
我想使用 Arduino Nano 从 Lora 发射器转储字符。通过这一行,我假设它可以将字符存储到一个数组中:
char* dump = (char)LoRa.read();
char in[255];
strcpy(in, dump);
char str[] = in;
但不幸的是我得到了这个编译器错误:
exit status 1
initializer fails to determine size of 'str'
我该如何解决?
更新
我给出我的全部代码。我为我的 objective 使用 shox96 shox96 from siara-cc 来压缩来自 Lora.read().
的数据
void print_compressed(char *in, int len) {
int l;
byte bit;
//Serial.write("\nCompressed bits:");
for (l=0; l<len*8; l++) {
bit = (in[l/8]>>(7-l%8))&0x01;
//Serial.print((int)bit);
//if (l%8 == 7) Serial.print(" ");
}
}
void loop() {
char* dump = (char)LoRa.read();
char in[255];
strcpy(in, dump);
char str[] = in;
char cbuf[300];
char dbuf[300];
int len = sizeof(str);
if (len > 0) {
memset(cbuf, 0, sizeof(cbuf));
int ctot = shox96_0_2_compress(str, len, cbuf, NULL);
print_compressed(cbuf, ctot);
memset(dbuf, 0, sizeof(dbuf));
int dlen = shox96_0_2_decompress(cbuf, ctot, dbuf, NULL);
dbuf[dlen] = 0;
float perc = (dlen-ctot);
perc /= dlen;
perc *= 100;
Serial.print(ctot);
Serial.write(",");
Serial.println(dlen);
}
delay(1000);
}
编译器只能在创建时为您提供数组的大小,前提是它有一个大括号括起来的初始化列表。像这样:
int array[] = {1, 2, 3, 4, 5};
如果您要执行除此以外的任何操作,则需要在这些大括号内输入一个数字。由于您正在制作数组的副本,并且该数组是 255 个字符,那么这个数组也需要是 255 个字符才能容纳。
char str[255] = in;
我对你的问题的评论仍然有效。这个答案清除了你的编译器错误,但我不认为它真的是解决你更大问题的方法。但是,如果没有看到更多您的代码并且对它了解得更多,我就不能说太多。到达该行时,您已经拥有此数据的两个副本。我不确定你为什么认为你需要第三个。
我想使用 Arduino Nano 从 Lora 发射器转储字符。通过这一行,我假设它可以将字符存储到一个数组中:
char* dump = (char)LoRa.read();
char in[255];
strcpy(in, dump);
char str[] = in;
但不幸的是我得到了这个编译器错误:
exit status 1
initializer fails to determine size of 'str'
我该如何解决?
更新
我给出我的全部代码。我为我的 objective 使用 shox96 shox96 from siara-cc 来压缩来自 Lora.read().
的数据void print_compressed(char *in, int len) {
int l;
byte bit;
//Serial.write("\nCompressed bits:");
for (l=0; l<len*8; l++) {
bit = (in[l/8]>>(7-l%8))&0x01;
//Serial.print((int)bit);
//if (l%8 == 7) Serial.print(" ");
}
}
void loop() {
char* dump = (char)LoRa.read();
char in[255];
strcpy(in, dump);
char str[] = in;
char cbuf[300];
char dbuf[300];
int len = sizeof(str);
if (len > 0) {
memset(cbuf, 0, sizeof(cbuf));
int ctot = shox96_0_2_compress(str, len, cbuf, NULL);
print_compressed(cbuf, ctot);
memset(dbuf, 0, sizeof(dbuf));
int dlen = shox96_0_2_decompress(cbuf, ctot, dbuf, NULL);
dbuf[dlen] = 0;
float perc = (dlen-ctot);
perc /= dlen;
perc *= 100;
Serial.print(ctot);
Serial.write(",");
Serial.println(dlen);
}
delay(1000);
}
编译器只能在创建时为您提供数组的大小,前提是它有一个大括号括起来的初始化列表。像这样:
int array[] = {1, 2, 3, 4, 5};
如果您要执行除此以外的任何操作,则需要在这些大括号内输入一个数字。由于您正在制作数组的副本,并且该数组是 255 个字符,那么这个数组也需要是 255 个字符才能容纳。
char str[255] = in;
我对你的问题的评论仍然有效。这个答案清除了你的编译器错误,但我不认为它真的是解决你更大问题的方法。但是,如果没有看到更多您的代码并且对它了解得更多,我就不能说太多。到达该行时,您已经拥有此数据的两个副本。我不确定你为什么认为你需要第三个。