我使用树莓派来存储一些文件。 我使用了Chilkat SSH / SCP lib并且正在工作。 我还有一个C ++程序,使用ascii(0-256)字符生成一个文件。 如果我用fwrite将文件写入我的本地磁盘,它将正确写入,但如果我尝试使用SCP附加到文件,它将只写一些部分。 我认为那是因为控制字符(0-31)。
编辑: 在source.cpp中:
while (!feof(filename))
{
size_t read = fread(&buf, 1, max_array, filename);
for (unsigned long long i = 0; i < read; i++)
{
char rdn = GetRandom_Soft();
num[i] = rdn;
buf[i] = buf[i] + rdn;
}
fwrite(&num, sizeof(char), read, filename2);
s7c.WriteKey((char *)rasp_file.c_str(), buf);
}
然后我有一个功能&#34; s7c.WriteKey&#34;与Chilkat lib:
int s7c_SFTP::WriteKey(char * filename, char * c)
{
if (s7c_SFTP::bloked) return -1;
if (!s7c_SFTP::scp.UploadString(filename, c, "ansi"))
{
cout << "[ERROR] Erro sending to device!" << endl;
return -2;
}
return 0;
}
&#34; GetRandomSoft&#34;:
char otp_samega7cattac::GetRandom_Soft()
{
return rand() % 256;
}
结果: 例如,你有一个1Mb文件的输入,所以文件genareted localy将具有相同的大小,他有这样的部分工作,但在树莓中生成的文件将更小,并且每次的大小都不相同我运行程序,所以我认为这是因为当我用随机数读取我读的内容时,如果在0到31之间,则lib不要写它。
原始文件(61个字节):
abcdefghijklmnopqrstuvyxwzABCDEFGHIJKLMNOPQRSTUVYXWZ123456789
本地文件(工作!61字节):
.覦 {5・&」jN)sエxG悵コrp焏Ь断・ムイノη`WP>・|auロ・lツn
Rasp(不,20个字节)#1尝试:
ÿ’_dN'–^N%eÖµ€%¤ŸAÞ
Rasp(差不多,58个字节)#2尝试:
vI³áœ€Ot×¼˜ã%»n%4>´F´@™U̦ܱÑÔÔ³«¥”ó[Ó»¦
(l¡øS¦G
这个文本框可以存在某种字符,但我没有这么大小!
编辑2:
现在我确定问题是控制字符!!!
我做了一个测试。如果随机字符和缓冲区的总和低于31我指定buf[i] = 'a';
并且大小匹配!!!
但我不知道如何在树莓派中编写控制字符因为我需要所有字符(0-255)。