通过扫码器扫描条形码,并解析条形码(python版本/C++版本)

         扫码器从本质上可以被视为键盘设备,利用程序实时读入扫取的序列号,然后,将号码发送到代请求网站上,返回Json数据中包含商品信息。

python版本

# -*- coding: utf-8 -*-
"""
Created on Fri Aug 30 15:05:58 2019

@author: xiaoxiaoke
"""

import sys, os
from pynput.keyboard import Controller,Key,Listener
import requests
import json
import numpy

# 监听按压
def on_press(key):    
    try:
         global str1
         str1 =str1+key.char       
         if len(str1)==13:
              url = 'https://www.mxnzp.com/api/barcode/goods/details?barcode='     
              url1=url+str1
              require1 = requests.get(url1)
              result1 = json.loads(require1.text)
              print(result1) #['data']['goodsName']
              print(result1['data']['goodsName'])
              str1=""    
    except AttributeError:
        return False

# 监听释放
def on_release(key):
    if key==Key.esc:
        # 停止监听
        return False
 
# 开始监听
def start_listen():
    with Listener(on_press=on_press,on_release=on_release) as listener:
        listener.join()

if __name__ == '__main__':
    str1=''
    start_listen()

C++版本

1、首先,查看设备号:

cat /proc/bus/input/devices

2、替换/dev/input/event10中的设备号。

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <linux/input.h>
#include <stdio.h>
#include <unistd.h>
#include <iostream>
#include <cstring>

struct input_event buff;
int fd;
int read_nu; 
char chr_table[12] = {
[0] = '\0', [1] = '*', [2] = '1', [3] = '2', [4] = '3', 
[5] = '4', [6] = '5', [7] = '6', [8] = '7', [9] = '8',
[10] = '9',[11] = '0'};
char barcode[13];
int main(int argc, char *argv[])
{
    
    fd = open("/dev/input/event10", O_RDONLY);
    if (fd < 0)
    {
        printf("can not open device usbkeyboard!");
    }
    int i = 2;
    while (1)
    {
        while (read(fd, &buff, sizeof(struct input_event)) == 0)
        {
            printf("barcode is NULL");
        }

        if (buff.type == EV_KEY)
	{
            if (buff.value == 0)
		{
                //printf("type:%d code:%c \n", buff.type, chr_table[buff.code]);
                barcode[i]=chr_table[buff.code];
		printf("num=%d barcode:%c \n", i,barcode[i]);

		if(i==12)
		{
		  i=2;
		 // printf("barcode:%s\n", barcode);
		}
		i++;
		}
	}     
    }
 
    close(fd);
    return 1;
}

解析条形码的内容:

#include <curl/curl.h>
#include <curl/easy.h>
#include <curl/curlbuild.h>
#include <sstream>
#include <iostream>
#include <boost/foreach.hpp>
#include <string>
#include <ctime>
#include <unistd.h>
//#include "json\json.h"  

using namespace std;

size_t write_data(void *ptr, size_t size, size_t nmemb, void *stream) {
    string data((const char*) ptr, (size_t) size * nmemb);
    *((stringstream*) stream) << data << endl;
    return size * nmemb;
}

int main(int argc, char *argv[])
{
 
        /*HTTP GET json data*/
        std::stringstream out;
        void* curl = curl_easy_init();
        // 设置URL
        curl_easy_setopt(curl, CURLOPT_URL, "https://www.mxnzp.com/api/barcode/goods/details?barcode=6925843404256");
        // 设置接收数据的处理函数和存放变量
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_data);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &out);

        // 执行HTTP GET操作
        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK) {
            fprintf(stderr, "curl_easy_perform() failed: %s\n", curl_easy_strerror(res));
        }

        // 接受数据存放在out中,输出之
        string str_json = out.str();
        printf("json數組:%s\n",str_json.c_str());
        JSONObject json = JSONObject.fromObject(str_json);
        curl_easy_cleanup(curl);
   
    return 0;
}

 

  • 1
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在昆仑通态触摸屏连接 USB 扫码枪的程序案例中,首先我们需要确保触摸屏和扫码枪的硬件设备已经正确连接好。 接下来,我们需要编写一个能够读取扫码枪数据的程序。可以利用常见的编程语言如C++Python等来完成。首先,我们需要调用操作系统提供的 USB 接口来与扫码枪进行通信。 然后,通过编程语言提供的方法,注册一个回调函数来接受扫码枪传输过来的数据。当用户使用扫码扫描条码时,我们的程序就会调用这个回调函数来处理接受到的数据。 在回调函数中,我们可以对接收到的数据进行解析和处理。根据条码的格式,可以选择不同的方法来解析数据。例如,如果是一维条码,可以通过扫码枪的说明文档来获取相关解析算法,从而提取条码的信息。 接着,我们可以根据解析出来的条码信息进行后续的操作。例如,可以将条码信息保存到数据库中,或者将其展示到触摸屏上供用户查看。 最后,为了实现触摸屏和扫码枪的交互,我们可以根据需求设计触摸屏界面,提供相关的操作按钮和提示信息给用户。用户可以通过触摸屏界面来触发扫码枪的扫描功能,并且可以看到扫码结果实时展示在触摸屏上。 总之,昆仑通态触摸屏连接 USB 扫码枪的程序案例中,主要包含了与扫码枪进行通信、数据解析和处理、以及触摸屏界面设计等几个关键步骤,通过合理编写程序,能够实现扫码枪的功能并与触摸屏实现交互。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值