EM 卡32进制韦根码转24进制韦根码
什么是EM卡?什么是韦根码?为什么需要32进制和24进制转换?
关于rfid原理和技术应用敬请期待~
代码执行效果
-
10进制和16进制:输入任意十进制数(输入+整形可以控制输出位数,缺省为直接输出)
-
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;
}