0
我们通过串行线路发送一些数据,除了crc16计算外,我几乎可以通过bash脚本(而不是代码)完成所有工作。如果我可以在脚本和代码中完成所有操作,它会使配置变得更容易(特别是在现场)。从CPP到bash的CRC16算法?
我用命令没问题,但当我们遇到棘手的事情时,我失去了所有的能力。
所以我的问题是,有人可以为我改写这个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位整数?
任何帮助将是伟大的。我在网上发现了一个小脚本,但我不相信它。认为这里回答真的很酷。
嘿,谢谢。我知道bash有很多这些操作符,但我不确定要保持变量的大小。从来没有想过会使用awk。 – jasonmclose 2011-12-15 14:03:17