1. ASIC字符串转换成十六进制字符
<span style="font-size:18px;">//---------------------------------------------------------------------
//Convert ASIC To Hex Value
//---------------------------------------------------------------------
//将ASIC的字符(编辑框取到的字符)转成十六进制字符
//例编辑框中输入6,用字符串取出后,再用此函数可以转成0x06;
unsigned char AsicConvert (unsigned char i, unsigned char j)
{
switch (i)
{
case 0x30:return (j=0x00);break;
case 0x31:return (j=0x01);break;
case 0x32:return (j=0x02);break;
case 0x33:return (j=0x03);break;
case 0x34:return (j=0x04);break;
case 0x35:return (j=0x05);break;
case 0x36:return (j=0x06);break;
case 0x37:return (j=0x07);break;
case 0x38:return (j=0x08);break;
case 0x39:return (j=0x09);break;
case 0x41:
case 0x61:return (j=0x0A);break;
case 0x42:
case 0x62:return (j=0x0B);break;
case 0x43:
case 0x63:return (j=0x0C);break;
case 0x44:
case 0x64:return (j=0x0d);break;
case 0x45:
case 0x65:return (j=0x0e);break;
case 0x46:
case 0x66:return (j=0x0f);break;
case 0x20:return (' ');break;
default: return(j=0x10);break;
}
}</span>
应用实例可参考和下面函数一起使用的例子。
2. 编辑框取值,字符串转成char字符
<span style="font-size:18px;">//---------------------------------------------------------------------
//编辑框取值,字符串转char函数
//---------------------------------------------------------------------
//该函数只能转0~F的字符
//编辑框取出的字符串作为该函数的输入参数(第一个参数)
//执行该函数后,需用一个字符数组指针接收其返回值
//该函数返回将输入的字符串转化后的各字符
//注意:编辑框中的两个字符代表输出后的一个字符
//例如:如需输出字符1,则编辑框中需输入01;如需要输出字符f,则编辑框中需输入0f
//如编辑框中输入5a,则输出字符为5A
unsigned char* EditDataCvtChar (CString strCnv, unsigned char * charRec)
{
//从RowNum编辑框取值
unsigned char * BSNum;
int CNumByte;
unsigned char k=0;
int i,j=0;
CNumByte=strCnv.GetLength();
BSNum = new unsigned char [CNumByte];
charRec = new unsigned char [CNumByte];
BSNum = (unsigned char*)(LPCSTR)strCnv;
for(i=0;i<CNumByte;i++)
{
charRec[i] = (AsicConvert(BSNum[j],k)<<4) | AsicConvert(BSNum[j+1],k);
j += 2;
}
return charRec;
}</span>
应用实例:
3. 十六进制字符串转十进制整型的函数
<span style="font-size:18px;">//---------------------------------------------------------------------
//十六进制字符串转十进制整型函数
//---------------------------------------------------------------------
int ChangeNum (CString str, int length)
{
char revstr[16]={0}; //根据十六进制字符串的长度,这里注意数组不要越界
int num[16]={0};
int count=1;
int result=0;
strcpy(revstr,str);
for (int i=length-1;i>=0;i--)
{
if ((revstr[i]>='0') && (revstr[i]<='9'))
num[i]=revstr[i]-48;//字符0的ASCII值为48
else if ((revstr[i]>='a') && (revstr[i]<='f'))
num[i]=revstr[i]-'a'+10;
else if ((revstr[i]>='A') && (revstr[i]<='F'))
num[i]=revstr[i]-'A'+10;
else
num[i]=0;
result=result+num[i]*count;
count=count*16;//十六进制(如果是八进制就在这里乘以8)
}
return result;
}</span>
应用实例
4. 将带回车键或空格键的字符串整理成没有回车键、空格键的字符串:
<span style="font-size:18px;">BYTE* PacketString (CString cvtStr, BYTE* packetBuf)
{
CString findStr = "\r\n";
int dPos=0;
int startPos=0;
// delete the enter key string
while((dPos=cvtStr.Find(findStr,startPos)) != -1)
cvtStr.Delete(dPos,2);
AfxMessageBox(cvtStr);
return packetBuf;
}</span>