⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 utility.cpp

📁 16进制字符串和16进制本身相互转换
💻 CPP
字号:
#include "stdafx.h"
#include "kqin.h"
#include "utility.h"

CString CUtility::chars2hex_str(CString ch,BOOL bBlank)
{
	int i=0;int len=ch.GetLength();
	CString s1="";
	for(;i<len;i++)	
	{
		s1+=ch2hex((ch[i]&0xf0)>>4);
		s1+=ch2hex(ch[i]&0x0f);
		if(bBlank)s1+=" ";
	}
	return s1;
}

CString CUtility::chars2hex_str(unsigned char* ch,int len,BOOL bBlank)
{
	int i=0;
	CString s1="";
	for(i=0;i<len;i++)
	{
		s1+=ch2hex((ch[i]&0xf0)>>4);
		s1+=ch2hex(ch[i]&0x0f);
		if(bBlank)s1+=" ";
	}
	return s1;
}

char CUtility::ch2hex(char ch)
{
	if(ch<=9)ch+='0';
	else ch+='W';
	return ch;
}

int CUtility::hex_str2chars(CString st,char* buf)
{
	int i=0,n;
	CString cs;
	st.MakeLower();
	st.Remove(' ');
	n=st.GetLength()/2;
	for(;i<n;i++)		
	{
		cs=st.Mid(2*i);
		buf[i]=st2char(cs);
	}
	return n;
}

char CUtility::st2char(CString st)
{
	st.MakeLower();
	return s2char(st[0])*0x10 + s2char(st[1]);
}

char CUtility::s2char(char s)
{
	if(s<='9')return s-'0';
	else return s-'W';
}

/*
1.	卡面号转换为卡内号
输入:11位卡面号(数字,如是ASCII码在函数中需转换位数字)。
输出:4位HEX卡内号,高字节在前。*/
void CUtility::card_to_hex(unsigned char *ptr)
{
unsigned char temp[12];
unsigned long id;
int i;
	temp[0]=*(ptr+9);
	temp[1]=*(ptr+10);
	temp[2]=*(ptr+7);
	temp[3]=*(ptr+8);
	temp[4]=*(ptr+5);
	temp[5]=*(ptr+6);
	temp[6]=*(ptr+3);
	temp[7]=*(ptr+4);
	temp[8]=*(ptr+1);
	temp[9]=*(ptr+2);
	id=0;
	for(i=0;i<10;i++)
		id=id*10+temp[i]-'0';
	*((unsigned long *)temp)=id;
	for(i=0;i<4;i++)
		*(ptr+i)=temp[i];
}


/*2.	卡内号转换为卡面号
输人:4位HEX卡内号,高字节在前。
输出:11位卡面号,数字ASCII码。
*/
void CUtility::card_to_bcd(unsigned char *ptr)
{
unsigned char scard[11];
unsigned char i,j;
unsigned int m;
unsigned long card_id;
	
	for(i=0;i<4;i++)
		scard[i] = ptr[3-i];
	card_id = *((unsigned long *)scard);	
	for(i=0;i<10;i++)
  	{
    		scard[9-i] = card_id%10;
      		card_id /= 10;
  	}
	scard[10] = scard[1];
	scard[1] = scard[8];
	scard[8] = scard[3];
	scard[3] = scard[6];
	scard[6] = scard[5];
	scard[5] = scard[4];
	scard[4] = scard[7];
	scard[7] = scard[2];
	scard[2] = scard[9];
	scard[9] = scard[0];	
	
	m = scard[1] + scard[3] + scard[5] + scard[7] + scard[9];
	
	for (i=2;i<11;i+=2)
	{
		j = (scard[i]) * 2;
		if (j > 9)
			m += j - 9;
		else
			m += j;
	}
	
	while (m > 9) 
		m -= 10;
		
	if (m == 0)
		scard[0] = 0;
	else
		scard[0] = 10 - m;	
	for(i=0;i<11;i++)
		*(ptr+i) = scard[i] + '0';	
	*(ptr+11)=0;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -