switch (c = fgetc( FileStream ))
{
case '0':
case '1':
case '2':
case '3':
case '4':
case '5':
case '6':
case '7':
case '8':
case '9':
l = (l << 4) + c - '0';
break;
case 'A':
case 'B':
case 'C':
case 'D':
case 'E':
case 'F':
l = (l << 4) + c - 'A' + 10;
break;是一个16进制的文件~
问题1:为什么要左移四位?2:-‘0’什么意思?
如果FileStream中保存有C76FAE8B字段那l等于多少?
{
case '0':
case '1':
case '2':
case '3':
case '4':
case '5':
case '6':
case '7':
case '8':
case '9':
l = (l << 4) + c - '0';
break;
case 'A':
case 'B':
case 'C':
case 'D':
case 'E':
case 'F':
l = (l << 4) + c - 'A' + 10;
break;是一个16进制的文件~
问题1:为什么要左移四位?2:-‘0’什么意思?
如果FileStream中保存有C76FAE8B字段那l等于多少?
2. c-'0',因为从文件里取得都是字符,两个字符的ascii码相减,如果c='1',减得的结果就是式进值数1,就可以把该结果用于相加了,所以程序里当c='0','1'...'9'时减'0',当c='A','B'...'F'时减'A'的ascii码值再加10,就得到对应的十进制数了
int c;
int l = 0;
我是这样理解的:因为c和l都是int型的所以是16位所以l初始是l=0000000000000000,(l << 4) + c如果c = 5就是0000000000000101那(l << 4) + c = 0000000000000101,但是'0'=00110000,那l = (l << 4) + c - '0'中的l等于多少?
从文本文件中读取一串数字,比如说C76FAE8B,你用了一个l这个变量来保存,可以看出,l至少需要4个字节,也就是一个long int。
起初l为0,然后读取'C',转换成数字12放到l中,本来'C'应该在最高位的,但是经过一次以后C在l中在最低位。这个时候l=0000000C。
再进行第二次,读取'7',转换成数字7,将l左移4位后加7,这个时候l=000000C7。
第三次,读取'6',转换成数字6,继续,l=00000C76
第四次,读取'F',转换成数字15,继续,l=0000C76F
....
第七次,读取'8',转换成数字8,继续,l=0C76FAE8
第八次,读取'B',转换成数字11,继续,l=C76FAE8BOk