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