因此,经过大量研究后,我发现使用 WideCharToMultiByte 非常适合通过 OPOS 将数据从控制对象发送到我的自定义 SO。好吧,我们遇到了一个错误。在 DirectIO 部分,C# 控制对象的映射是 DirectIO(int command, ref int data, ref string object);
在最长的时间内,我们只需要通过 DirectIO 发送简单的命令。例如,要打开 LED,我们会将数据设置为以毫秒为单位的长度,并将对象设置为颜色。当我们需要将数据写入标签或卡片时,必须将文本从特殊的 XML 样式的字符串解析为字节数组......现在需要我们需要一个字节数组,使用 ASCII 编码将该数组放入字符串形式,并让它写入..
问题是当我在我的服务对象中转换这个字符串时它没有正确转换它。即使 SysStringLen 知道长度是 4 字节,它似乎也停止在 null 上。示例 控制对象执行此操作
int page = 16;
byte[] data = new byte[] { 0x19, 0x00, 0x30, 0x00 };
string pData = System.Text.ASCIIEncoding.ASCII.GetString(data);
msr.DirectIO(902, ref page, ref pData);
SO看到了这个
int len = (int)SysStringLen(*pString);
long dataData = *pData;
char* dataObject = new char[1+len];
WideCharToMultiByte(CP_ACP, 0, *pString, -1, dataObject, len, NULL, NULL);
ByteUtil::LogArray("dataObject", (BYTE*)dataObject, len);
产生的输出
dataObject(4)-19:00:00:00
基本上只要达到第一个空字符,其余数据就会丢失。现在,如果我将数字从字符串转换为字符串,它可以正常工作,因为我有一个 ByteUtil 函数只是为了那个场合......但我似乎不应该这样做......为什么不能我只是把它作为一个字节数组?