0

如果条形码包含二进制数据,我将如何使用 Scanner 的 DataEvent 读取数据?

当我从 ScanDataLabel 读取数据时,我在数组的某些部分中的数据字节之间得到了额外的 0,而其他部分似乎没有受到影响。我尝试将它们编码为 ASCII 和 Unicode,但无济于事。

我正在为此应用程序使用 Honeywell 1900 手持式条形码扫描仪。

以下是我尝试的代码:

static void Main(string[] args)
        {
            var explore = new PosExplorer();
            var devices = explore.GetDevices(DeviceType.Scanner);
            var device = explore.GetDevice(DeviceType.Scanner, "POSScanner");
            var scan = (Scanner)explore.CreateInstance(device);
            scan.Open();
            scan.Claim(500);
            scan.DeviceEnabled = true;
            scan.DataEventEnabled = true;
            scan.DecodeData = true;
            
            scan.DataEvent += delegate (object sender, DataEventArgs e){
                
                var data = scan.ScanDataLabel;
                var type = scan.ScanDataType.ToString();
                var encoder = Encoding.Unicode;
                var dataString = encoder.GetString(data);
                var rawData = Encoding.ASCII.GetBytes(dataString);
            };
            Console.ReadLine();
            scan.DeviceEnabled = false;
            scan.Release();
            scan.Close();
        }

数据应该是,例如

{220,3 ...

而是包含

{220,0,3,0 ...

并且上面尝试的代码具有以下内容,这是不正确的

{120,...
4

1 回答 1

0

这可能是因为您使用的Lagacy COM Interop是运行 OPOS 服务对象。
POS for .NET Architecture(POS for .NET v1.12 SDK 文档)
旧服务对象的集成(POS for .NET v1.12 SDK 文档)

ILegacyControlObject.BinaryConversion本文中描述的设置是相关的。
PosPrinter PrintMemoryBitmap 抛出非法异常

您可能希望在读取扫描仪的或属性之前设置ILegacyControlObject.BinaryConversionNibble或,并在读取后设置为 。DecimalScanDataScanDataLabelNone

但是,假设霍尼韦尔的 OPOS 服务对象支持该BinaryConversion规范。

并且读取的数据是 的二进制数据byte[],可以按原样处理,不需要Encoding.GetBytes

于 2022-02-20T03:25:35.037 回答