我们正在通过串行线路发送一些数据,除了 crc16 计算之外,我几乎可以通过 bash 脚本(而不是代码)完成所有操作。如果我可以在脚本与代码中完成所有操作,它将使配置变得更容易(尤其是在现场)。
我对命令没问题,但是当我们遇到棘手的事情时,我失去了所有能力。
所以我的问题是,有人可以为我重写这个 CRC16,但是在 bash 中?
这是从维基百科抓取的算法,它是我们代码中的算法:
uint16_t Encoder::checksum(std::string thestring)
{
uint8_t d, e, f;
uint16_t c, r, crccalc;
c = 0xffff;
for (unsigned int i = 0; i < thestring.length(); i++)
{
d = thestring[i];
e = c ^ d;
f = e ^ (e << 4);
r = (c >> 8) ^ (f << 8) ^ (f << 3) ^ (f >> 4);
c = r;
}
c ^= 0xffff;
crccalc = c;
return crccalc;
}
我可以很容易地从 C++ 代码中创建一个可执行文件,然后将其输入标准输入,但我认为能够在 bash 中包含它会非常好。
我不知道的另一件事是如何确保我的可变大小是正确的。我怎样才能确保我得到一个 16 位整数?
任何帮助都会很棒。我在网上找到了一个小脚本,但我不相信它。认为在这里回答真的很酷。