【RFID】EM 卡32进制韦根码转24进制:含16进制和10进制互转

EM 卡32进制韦根码转24进制韦根码

什么是EM卡?什么是韦根码?为什么需要32进制和24进制转换?
关于rfid原理和技术应用敬请期待~

代码执行效果

  1. 10进制和16进制:输入任意十进制数(输入+整形可以控制输出位数,缺省为直接输出)
    在这里插入图片描述
    在这里插入图片描述

  2. 32位韦根码转24位韦根码
    在这里插入图片描述

小讲解:输出流格式控制

#include <iomanip>头文件中定义了输出流格式控制函数setw()setfill,和关键字left,right
举个例子:

    cout << "1234567"<<endl;                                            
    cout<<setw(10)<< "1234567" << endl;                                 //控制输出至少10个占位符,缺省为空格(若大于10则全部输出)
    cout <<setfill('0') << setw(10) << "1234567" << endl;               //设置占位符格式
    cout <<left<< setfill('0') << setw(10) << "1234567" << endl;        //设置左/右对齐,缺省为右对齐

运行结果:
在这里插入图片描述

源代码

代码不太美观,不过好用就行

#pragma warning(disable:4996)
#include<stdio.h>
#include<windows.h>
#include"fun.h"

int main() {

    while (1) {
        printf("****************    韦根24、32格式转换     **********************\n");
        printf("****************    10进制,16进制互转     **********************\n");

        printf("输入1 进行16转10进制\n");
        printf("输入2 进行10转16进制\n");
        printf("输入3 进行维根 32 格式卡号转维根 24 格式卡号\n");
        printf("输入4 进行由维根 32 格式卡号 反推 卡内序列号\n");
        printf("输入5 结束程序\n");
        int btn1;
        scanf_s("%d", &btn1);
        switch (btn1) {
            case 1 : fun_10_to_16(); break;
            case 2: fun_16_to_10(); break;
            case 3: fun_wg32_to_wg24(); break;
            case 4: fun_wg32_to_xlh(); break;
            case 5: return 0;
        }
        system("pause");
        system("cls");
    }
}

文件 fun.h 封装了所有函数:

#pragma once
#pragma warning(disable:4996)
#include<stdio.h>
#include<string>
#include<iostream>
#include<math.h>
#include<iomanip>
using namespace std;

   
long  fun(char* s)              //十六进制转十进制
{
    int i, t;
    long sum = 0;
    for (i = 0; s[i]; i++)
    {
        if (s[i] <= '9')
            t = s[i] - '0';
        else
            t = s[i] - 'A' + 10;
        sum = sum * 16 + t;
    }
    return sum;
}



int fun_10_to_16() {
    char arr[] = "0123456789ABCDEF";
    char hex[16];
    int i = 0;
    int j = 0;
    int num = 0, a = 0;
    printf("输入一个整数:");
    scanf_s("%d", &num);
    a = num;
    while (num)
    {
        hex[i++] = arr[num % 16];   //对十进制数求余并最终与hextable数组中的字符匹配
        num = num / 16;
    }
    printf("十进制数%d转换成十六进制数是:", a);
    for (j = i - 1; j >= 0; --j)
        printf("%c", hex[j]);
    printf("\n\n");
    return 0;
}


int fun_16_to_10() {
    char hex[999];
    printf("输入一个十六进制数: ");
    cin >> hex;
    cout <<"转换为十进制为:  " << fun(hex) << endl;        //hex:16进制,dec:10进制,bin:2进制
    return 0;
}

int fun_wg32_to_wg24() {
    char arr[] = "0123456789ABCDEF";
    char hex[16]="";
    int i = 0;
    int j = 0;
    int num = 0, a = 0;
    printf("输入十位数韦根32格式:");
    scanf_s("%d", &num);
    a = num;
    while (num)
    {
        hex[i++] = arr[num % 16];   //对十进制数求余并最终与hextable数组中的字符匹配
        num = num / 16;
    }
    printf("十进制数%d转换成十六进制数是:", a);
    int str = strlen(hex);
    char newarr[10]="";
    for (int i = 0; i < 10; i++)newarr[i] = 0;
    //printf("%s %d\n", hex,str );
    int count = 0;
    int abcde=0;
    for (int i = str; i < 8; i++) {

        printf("0");       //假如不足8位数,用0补齐     
        newarr[abcde] = '0';
        abcde++;
    }

    for (j = i - 1; j >= 0; --j) {

        printf("%c", hex[j]);
        newarr[count+abcde] = hex[j];
        count++;
    }
    printf("\n\n");
    //cout <<endl<< "新串为" << " " << newarr << endl;
    char arr1[5]="";
    char arr2[5]="";
    char arr3[3] = "";
    memcpy(arr1, newarr , 4);
    memcpy(arr2, newarr + 4, 4);
    memcpy(arr3, newarr + 2,2);

    cout <<" 反推序列号后八位为  " << arr1 << "," << arr2<<endl;
    //printf("\n计算得韦根24格式码:%lld,%lld",fun(former),fun(back));
    cout << "计算得到24格式韦根数为" <<setfill('0') << setw(3) << fun(arr3) << "," 
        << setfill('0') << setw(5) << fun(arr2) << endl;
        
    
    printf(",");

        
    printf("\n\n");
    return 0;
}


int fun_wg32_to_xlh() {
    return 0;
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
EM4100是一种低频非接触式射频识别,常用于门禁系统、考勤系统等。下面是关于EM4100的相关问题的解答。 1. EM4100是什么? EM4100是一种低频射频识别,工作频率为125kHz,包装形式为芯片与线圈封装在一起的片。它采用125kHz的射频信号进行无线识别和通信,用于门禁、考勤、物品追踪等应用。 2. 如何读取EM4100的信息? 读取EM4100的信息需要使用与之兼容的读器设备。读器通过射频信号与片进行通信,读取片上存储的标识码或其他信息。读器一般通过USB、串口或者无线方式与计算机或其他设备连接,将读取到的信息传输给相应的应用程序进行处理。 3. EM4100的特点有哪些? EM4100具有价格低廉、传输距离较短、读取速度快等特点。它的通信协议简单,适用于一些对安全性要求不高的应用场景。 4. 如何编程控制EM4100EM4100的编程操作一般需要通过特定的编程设备或者读器来进行。根据不同的需求,可以对片进行读取、写入、擦除等操作。编程操作需要遵循EM4100的通信协议规范进行。 5. EM4100的应用领域有哪些? EM4100广泛应用于门禁系统、考勤系统、图书馆管理、宾馆会议室管理、物品追踪等场景。它可用于识别用户身份、记录出入时间、管理物品位置等。由于其价格低廉,部署方便,被广泛应用于各种需要射频识别的场景。 以上是关于EM4100的一些相关问题的简要回答。希望对您有所帮助!

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值