有一次在專案開發中,需要把收到的封包做 checksum 驗證。邏輯很單純,把 buffer 的每個 byte 加起來,對吧?
我寫了一個驗證函式,丟進去跑,結果 checksum 每次都不對。封包明明是對的,Wireshark 抓出來也沒問題,但我的函式就是算錯。
花了快一個小時在懷疑通訊協定、懷疑 byte order、懷疑硬體……最後發現問題出在 sizeof。一個我以為自己很熟的東西。
問題長這樣
簡化後的程式碼大概是這樣:
韌體開發、踩坑心得、然後想辦法讓錢也幫自己工作。
有一次在專案開發中,需要把收到的封包做 checksum 驗證。邏輯很單純,把 buffer 的每個 byte 加起來,對吧?
我寫了一個驗證函式,丟進去跑,結果 checksum 每次都不對。封包明明是對的,Wireshark 抓出來也沒問題,但我的函式就是算錯。
花了快一個小時在懷疑通訊協定、懷疑 byte order、懷疑硬體……最後發現問題出在 sizeof。一個我以為自己很熟的東西。
簡化後的程式碼大概是這樣: