1
我一直試圖根據文件頭產生校驗和,並且收到衝突的結果。在從設備手冊,它指出以下,以產生校驗:奇校驗和結果 - 沒有收到預期的結果
「一個簡單的八比特計算被用於報頭校驗是所需的步驟如下:
- 計算的總和單個字節中的標題字節;或者計算 的總和,然後將結果與FFhex相加
- 校驗和= FFhex - 來自步驟1的和。
在這裏,我已經創建了下面的代碼在Lua:
function header_checksum(string)
local sum = 0
for i = 1, #string do
sum = sum + string.byte(i)
end
local chksum = 255 - (sum & 255)
return chksum
end
如果我下面的(4X字節)發送一串下來print(header_checksum("0181B81800"))
我得到以下結果:
- 241(字符串發送,因爲你看到它)
- 0(每個字節更改爲十六進制,然後發送到功能)
在給出的示例中,它指出該字節應爲AD
,即173(dec)或\ 255。
有人可以告訴我我在做什麼是錯的;要麼寫的代碼,我的方法,或兩者?
使用'字符串:字節(我)',而不是'string.byte(我)' –
這裏的樣式尼特是,你命名的參數'string'這也是一個標準模塊的名稱,具體該模塊是所有字符串的元數據,通常在'_G.string'中找到。重載這個名字是完全合法的Lua,但是它是人們讀者習慣於看到'string.byte()'用於直接引用該函數的一個混淆之處。 – RBerteig
@RBerteig好點。我很容易混淆,尤其是當涉及到bit32庫以及如何正確使用它時。我應該停止讓事情變得更糟。您的觀點是爲未來的編碼注意的! – Pwrcdr87