Hi,
My project is a serial port console written in C# that uses an embedded Lua interpreter via NLua. I have a lua script to send a binary messages out the serial port. I am using string.pack to create the message. My lua script:
local bytes = {0x5AA5}
local cable_info_msg = ""
for i,v in pairs(bytes) do
print (v)
print(string.format("%x",tonumber(v)))
cable_info_msg = cable_info_msg .. string.pack("<h", v)
num = string.unpack("<h",cable_info_msg)
if not num then print ('nil')
else
print(cable_info_msg)
print(num)
print(string.format("%x",num))
end
end
--A C# function...
WriteRemote(cable_info_msg, false)
-------------------------------------------------------------------
My console output from the script seems to be consistent with what I expect:
-- Input
23205
5aa5
-- Output
ÑZ
23205
5aa5
---------------------------------------------------------------------
My C# WriteRemote is simple:
public void WriteRemote(string data, bool appendLineEnding = true)
{
if(_logging)
{
_scriptLog.WriteLine(data);
}
data = "" ? data + _lineEnding : data;
byte[] bytes = Encoding.UTF8.GetBytes(data);
src.Write(bytes,0,bytes.Length);
}
And the Lua/C# bindings are simple too:
private Lua NewEnv()
{
Lua env = new Lua();
env["WriteConsole"] = new Action<string>(WriteConsole);
env["ReadConsole"] = new Func<string>(ReadConsole);
env["WriteRemote"] = new Action<string,bool>(WriteRemote);
...
return env;
}
When I look at the final bytes I am about to send on the C# debugger, the value seems to have been mangled (truncated?) to 0x3F5A. That value is also what I get on the other end of the serial port but I was expecting 0xA55A.
At this point I have two candidates for the cause:
- I'm an idiot and this is perfectly explainable behaviour (most probable)
- Something bad is happening in the translation between Lua and C#
-?
Does anyone have a Lua explanation why I would be getting different values sent out the port than what I am expecting? I'd like to rule that out before I start investigating NLua.
All input welcome. Thanks,
Russ