以BCD(16进制)码存储的Char数据以Int型表示

来源:互联网 发布:云计算的特征是什么 编辑:程序博客网 时间:2024/06/06 02:24

char型数据里面的数据是以16进制数存储的,每个char型数据的可能值是从0x00~0xff(表示为2进制范围是从00000000~11111111)的16进制数,即每个char型数据里面能存储8位的数据。如果存储类型为BCD码,那也就是按照2进制来存储数据。对应表如下:

[cpp] view plaincopyprint?
  1. Int  二进制  BCD码  Hex   
  2. 0    0000    0000    0  
  3. 1    0001    0001    1  
  4. 2    0010    0010    2  
  5. 3    0011    0011    3  
  6. 4    0100    0100    4  
  7. 5    0101    0101    5  
  8. 6    0110    0110    6  
  9. 7    0111    0111    7  
  10. 8    1000    1000    8  
  11. 9    1001    1001    9  
  12. 10   1010    1010    A  
  13. 11   1011    1011    B  
  14. 12   1100    1100    C  
  15. 13   1101    1101    D  
  16. 14   1110    1110    E  
  17. 15   1111    1111    F  

实现转换的代码如下:

[cpp] view plaincopyprint?
  1. #include<iostream>  
  2. #include<time.h>  
  3. using namespace std;  
  4.   
  5. string Char2BCD(unsigned char *c,int len)  
  6. {  
  7.          
  8.        char s[100];  
  9.        char c1,c2;  
  10.        string str="";  
  11.        for(int i=0;i<len;i++)  
  12.        {  
  13.         c1= c[i]&0x0f;//提取2进制数的低4位   
  14.         c2= c[i]>>4;//提取2进制数的高4位   
  15.         int n=c2*10+c1;//转成int(10进制数)表示   
  16.         //int n=(int)(((c2&0x08+c2&0x04+c2&0x02+c2&0x01)<<4)+(c1&0x08+c1&0x04+c1&0x02+c1&0x01));  
  17.        if(n<=9&&n>=0)  
  18.        {  
  19.          str+="0";  
  20.        }  
  21.        str+=itoa(n,s,10);  
  22.        }  
  23.        return str;  
  24. }  
  25.   
  26. int main(){  
  27. char *wday[]={"Sun","Mon","Tue","Wed","Thu","Fri","Sat"};  
  28.   
  29. time_t timep;  
  30. struct tm *p;  
  31. time(&timep);  
  32. p=localtime(&timep); /*取得当地时间*/  
  33. printf ("%d %d %d ", (1900+p->tm_year),( 1+p->tm_mon), p->tm_mday);  
  34.   
  35. printf("%s %d:%d:%d\n", wday[p->tm_wday],p->tm_hour, p->tm_min, p->tm_sec);  
  36.   
  37. int tt=(p->tm_year-100);  
  38. unsigned char cc=(((tt/10)&0x0f)<<4)+((tt%10)&0x0f);  
  39. cout<<"YY:  "<<Char2BCD(&cc,1)<<endl;  
  40.   
  41. cout<<"INT: "<<0x17<<endl;//16进制的0x17是10进制(即int型)的23   
  42. unsigned char c=0x17;  
  43. cout<<"BCD: "<<Char2BCD(&c,1)<<endl;  
  44.   
  45. unsigned char a[4]={0x17,0x99,0x99};  
  46. cout<<"ID "<<Char2BCD(a,3)<<endl;  
  47.   
  48. system("pause");  
  49. }  

原创粉丝点击