#关于keil的一些基础知识(持续更新)
1.数据类型转换
(1)写程序的时候需要将一个32位16进制数值转换到10进制显示在TF屏上,由于基础比较烂,一直没有想明白,写了各种复杂的类型转换。。
代码如下:
把u32 Id0的值转化成long 类型给card_id
Id0=((rBuf1[1]&0xff000000)>>6*4)|((rBuf1[1]&0x00ff0000)>>2*4)|((rBuf1[1]&0x0000ff00)<<2*4)|((rBuf1[1]&0x000000ff)<<6*4);
// Id[7]=(Id0&0xf0000000)>>7*4;
// Id[6]=(Id0&0x0f000000)>>6*4;
// Id[5]=(Id0&0x00f00000)>>5*4;
// Id[4]=(Id0&0x000f0000)>>4*4;
// Id[3]=(Id0&0x0000f000)>>3*4;
// Id[2]=(Id0&0x00000f00)>>2*4;
// Id[1]=(Id0&0x000000f0)>>1*4;
// Id[0]= Id0&0x0000000f;
// for(c=0;c<8;c++)
// {
// switch(Id[c])
// {
// case 0x00000000 : l1=0;break;
// case 0x00000001 : l1=1;break;
// case 0x00000002 : l1=2;break;
// case 0x00000003 : l1=3;break;
// case 0x00000004 : l1=4;break;
// case 0x00000005 : l1=5;break;
// case 0x00000006 : l1=6;break;
// case 0x00000007 : l1=7;break;
// case 0x00000008 : l1=8;break;
// case 0x00000009 : l1=9;break;
// case 0x0000000A : l1=10;break;
// case 0x0000000B : l1=11;break;
// case 0x0000000C : l1=12;break;
// case 0x0000000D : l1=13;break;
// case 0x0000000E : l1=14;break;
// case 0x0000000F : l1=15;break;
// default : break;
// }
// switch(c)
// {
// case 0 : card_id1=l1*1;break;
// case 1 : card_id2=l1*16;break;
// case 2 : card_id3=l1*256;break;
// case 3 : card_id4=l1*4096;break;
// case 4 : card_id5=l1*65536;break;
// case 5 : card_id6=l1*1048576;break;
// case 6 : card_id7=l1*16777216;break;
// case 7 : card_id8=l1*268435456;break;
// default : break;
// }
// card_id=card_id1+card_id2+card_id3+card_id4+card_id5+card_id6+card_id7+card_id8;
// }
g_lCard_id=card_id;
// card_id=0;
//
但是当我使用debug调试时,观测变量的值,发现显示转换后的值仍然是16进制显示,而我在显示屏观测看到的是一个十进制整数,才发现我被自己差劲的基础坑了。
我可以直接将u32 Id0的值赋给long类型的g_lCard_id
如下:
Id0=((rBuf1[1]&0xff000000)>>6*4)|((rBuf1[1]&0x00ff0000)>>2*4)|((rBuf1[1]&0x0000ff00)<<2*4)|((rBuf1[1]&0x000000ff)<<6*4);
g_lCard_id=Id0;
两种方式在显示屏上显示的效果是一样的。。。
PS:萌新一个,如有错误,还请指正