1.
void xitoa(int n, char s[])
{
int i,sign;
if((sign=n)<0)
n=-n;
i=0;
do{
s[i++]=n % 10 + '0';
} while((n /= 10) > 0);
if (sign < 0)
s[i++]= '-';
s[i] = '\0';
reverse(s);
}
2.
int xatoi_intel(ibuf, start, size)
unsigned char *ibuf;
int start, size;
{
int i;
int itmp;
int val;
val = 0;
for(i=size-1; i>=0; i--) {
itmp = (int) ibuf[start + i];
itmp <<= 8 * i;
val += itmp;
}
return val;
}
----------------解决方案--------------------------------------------------------
先顶一个
----------------解决方案--------------------------------------------------------
怎么连main()都没有啊
----------------解决方案--------------------------------------------------------
1.//这就是个将整型转化为二进制字符的函数,带符号的
void xitoa(int n, char s[])
{
int i,sign;
if((sign=n)<0) //表示符号,>0则为正,<0则为负
n=-n;
i=0;
do{
s[i++]=n % 10 + '0';
} while((n /= 10) > 0); //以字符形式将n的二进制码存到s中
if (sign < 0)//如果是负数则在最后加个-号
s[i++]= '-';
s[i] = '\0';
reverse(s);
}
2.这个实现将一个无符号字符型串中start开始到start+size之间的字符,以一种算法转化为32位整型数
int xatoi_intel(ibuf, start, size)
unsigned char *ibuf;
int start, size;
{
int i;
int itmp;
int val;
val = 0;
for(i=size-1; i>=0; i--) {
itmp = (int) ibuf[start + i];//这个从最后位取字符转化为整型数
itmp <<= 8 * i;//左移i*8位
val += itmp;//将结果加起来
}
return val;
}
1145258561=68*2^24+67*2^16+66*2^8+65 这里68,67,66,65分别是D,C,B,A的ASII值,因为是倒着读的
我们再执行xatoi_intel(str1,0,5)发现
结果为1145258630
1145258630-1145258561=69=(int)E
结果就很明显了,因为(int)E经过了左移32(因为8*4=32,4=5-1=size-1)相当于没有移动,这里暂且这么认为
因为<<是循环位移,所以才将(int)E加在了结果上
----------------解决方案--------------------------------------------------------
感谢medicihophy
----------------解决方案--------------------------------------------------------