應該是手冊寫錯了
0x02 + 0x30313030 + 0x01 + 0x0D + 0x0A
這邊不能用+來表示,會變成16進制的運算
應該是二進制下的串接
MsgBox(0, "Result", Binary("0x02") & Binary("0x30313030") & Binary("0x01") & Binary("0x0D") & Binary("0x0A"))
BitXOR(0,1,2,0) 返回結果是十進制數字3
0x03 是16進制表示法,需用Hex函數再轉換一次
MsgBox(0, "Result", _Test("0100") & @CRLF & _Test("0120"))
Exit
Func _Test($DATA)
Return SetError(0, 1, "0x02" & StringTrimLeft(StringToBinary($DATA), 2) & _XORChecksum($DATA) & "0D0A")
EndFunc
Func _XORChecksum($Text)
Local $CheckCode = 0
While $Text <> ""
$CheckCode = BitXOR(StringToBinary(StringLeft($Text, 1)), $CheckCode)
$Text = StringTrimLeft($Text, 1)
WEnd
Return SetError(0, 0, Hex($CheckCode, 2))
EndFunc
|