Device :: HID считывает сканер штрих-кода, конвертирует двоичный код в Ascii - PullRequest
0 голосов
/ 11 июня 2018

Я пытаюсь прочитать сканер штрих-кода.Я получил данные со сканера, и формат является двоичным.Как связать двоичный файл со строкой Ascii?

Тип штрих-кода - код 39.

A1234 => [SCANNRT штрих-кода] => [perl] => двоичный => ??A1234 ???

use Device::HID;
use Data::Hexdumper qw(hexdump);

my $dev = Device::HID->new(vendor => 0x04b4, product => 0x0100) or die "No such device !\n";
$dev->timeout = 0.1; # seconds (=100 ms)
my $buf;
my $len=128;

while(defined(my $in = $dev->read_data($buf, $len))){

    if ($in == 0) {
        next;
    }

    print hexdump(
        data           => $buf, # what to dump
        suppress_warnings => false,
        space_as_space=> true,
    );


}

Бинарный выход «A1234».Как преобразовать в строку «A1234».

  0x0000 : 02 00 04 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................
  0x0000 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................
  0x0000 : 00 00 1E 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................
  0x0000 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................
  0x0000 : 00 00 1F 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................
  0x0000 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................
  0x0000 : 00 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 : .. .............
  0x0000 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................
  0x0000 : 00 00 21 00 00 00 00 00 00 00 00 00 00 00 00 00 : ..!.............
  0x0000 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................
  0x0000 : 00 00 28 00 00 00 00 00 00 00 00 00 00 00 00 00 : ..(.............
  0x0000 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................

Я изменяю код для получения шестнадцатеричного значения для каждого пакета.

use Device::HID;
use Data::Hexdumper qw(hexdump);
my $dev = Device::HID->new(vendor => 0x04b4, product => 0x0100) or die "No such device !\n";
$dev->timeout = 0.1; # seconds (=100 ms)
my $buf;
my $len=128;
my $i=0;

while(defined(my $in = $dev->read_data($buf, $len))){
    if ($in == 0) {
        next;
    }
    $i++;
    my $hex = unpack(  'H*', $buf );
    print sprintf("%02d",$i)." => $hex\n";
}

Выход шестнадцатеричный.Я изменяю код для вывода шестнадцатеричного.Я получил 12 посылок.Как преобразовать в строку «A1234»?

01 => 0200040000000000
02 => 0000000000000000
03 => 00001e0000000000
04 => 0000000000000000
05 => 00001f0000000000
06 => 0000000000000000
07 => 0000200000000000
08 => 0000000000000000
09 => 0000210000000000
10 => 0000000000000000
11 => 0000280000000000
12 => 0000000000000000
...