在线时间111 小时
UID359680
注册时间2007-9-9
NXP金币0
该用户从未签到
金牌会员
 
- 积分
- 2394
- 最后登录
- 1970-1-1
|
本帖最后由 anger0925 于 2015-12-1 16:40 编辑
自己平时使用到的一些字符与整数的转化。
1,字符转十六进制
static uint8 str2hex(uint8 *str)
{
uint8 hex[] = "0123456789ABCDEF";
uint8 i=0,h,l;
for(i=0;i<16;i++){
if(hex==str[0])
h=i;
if(hex==str[1])
l=i;
}
return (h*16+l);
}
2,字符串转BCD码
void CharToBcd(char * Cbuf, BYTE * Bbuf,short *blen)
{
short i,j;
short tem_len;
BYTE tem_h;
BYTE tem_l;
tem_len = strlen(Cbuf);
for(i = 0;i < tem_len;i++)
{
switch(Cbuf)
{
case '0':
case '1':
case '2':
case '3':
case '4':
case '5':
case '6':
case '7':
case '8':
case '9':
Cbuf = ((Cbuf-0x30)&0x0f);
break;
case 'A':
case 'a':
Cbuf = 0x0A;
break;
case 'B':
case 'b':
Cbuf = 0x0B;
break;
case 'C':
case 'c':
Cbuf = 0x0C;
break;
case 'D':
case 'd':
Cbuf = 0x0D;
break;
case 'E':
case 'e':
Cbuf = 0x0E;
break;
case 'F':
case 'f':
Cbuf = 0x0F;
break;
}
}
if((tem_len % 2) == 0)
{
for(i = 0 ,j =0; i < tem_len;i++,j++)
{
tem_h = (BYTE)(Cbuf<<4)&0xf0 ;
tem_l = (BYTE)(Cbuf[++i]&0x0f);
Bbuf[j] = tem_h | tem_l;
}
*blen = (tem_len/2);
}
else
{
if(tem_len == 1)
{
Bbuf[0] = (BYTE)(Cbuf[tem_len-1]&0x0f);
*blen = tem_len;
}
else
{
for(i = 0 ,j =0; i < tem_len-1;i++,j++)
{
tem_h = (BYTE)(Cbuf<<4)&0xf0 ;
tem_l = (BYTE)(Cbuf[++i]&0x0f);
Bbuf[j] = tem_h | tem_l;
}
Bbuf[tem_len/2] = (BYTE)(Cbuf[tem_len-1]&0x0f);
*blen = (tem_len/2)+1;
}
}
}
3,BCD转十进制
uint8_t bcd2bin (uint8_t val)
{
return val - 6 * (val >> 4);
}
4,十进制转BCD
uint8_t bin2bcd (uint8_t val)
{
return val + 6 * (val / 10);
}
5,十进制转BCD
INT8U Dec16toBCD(INT16U Dec, INT8U *Bcd,INT8U length)
{
INT8U i;
INT8U temp;
//for(i=length-1; i>=0; i--)
for(i=0;i<length;i++)
{
temp = Dec%100;
Bcd = ((temp/10)<<4) + ((temp%10) & 0x0F);
Dec /= 100;
}
return 0;
}
6,BCD转十进制
uint8_t BCDToInt(uint8_t bcd) //BCD转十进制
{
return ((0xff & (bcd>>4))*10 +(0xf & bcd));
}
7,整数转字符串
static int int2string(long lNum,char chWord[])
{
int i=0,j;
char chTemp;
if(lNum == 0)
{
chWord = '0' ;
i++;
}
else
{
while(lNum!=0)/*依次取整数的末位,存入chWord */
{
chWord = '0' +lNum%10;/*转换为数字的ASCII码*/
i++;
lNum = lNum/10;
}
//chWord = '\0'; /*字符串最后一位加'\0'*/
for(j=0;j<i/2;j++)/*将字符串转置*/
{
chTemp = chWord[j];
chWord[j] = chWord[i-1-j];
chWord[i-1-j] = chTemp;
}
}
return i;
}
8,字符串转十六进制
static unsigned char String2Hex(char* str)
{
unsigned char var=0;
unsigned char t;
int len = strlen(str);
strupr(str);//统一大写
for (; *str; str++)
{
if (*str>='A' && *str <='F')
t = *str-55;//a-f之间的ascii与对应数值相差55如'A'为65,65-55即为A
else
t = *str-48;
var<<=4;
var|=t;
}
return var;
}9,十六进制转ASCII
static unsigned char OneHexToASCII(unsigned char aHex)
{
if((aHex>=0)&&(aHex<=9))
aHex +=0x30;
else if((aHex>=10)&&(aHex<=15))//A-F
aHex += 0x37;
return aHex;
}
static void HexToASCII(INT8U *buf, INT16U buflen,INT8U *rebuf)
{
INT8U i,j=0;
for(i=0;i<buflen;i++)
{
//printf("hexbuf=%x\n\r",buf);
rebuf[j++] = OneHexToASCII((buf>>4)&0x0f);
rebuf[j++] = OneHexToASCII((buf)&0x0f);
}
}
字符转化.zip
(1.43 KB, 下载次数: 5)
|
|