当前位置: 代码迷 >> C语言 >> 两个小函数,表达什么意思?
  详细解决方案

两个小函数,表达什么意思?

热度:130   发布时间:2007-08-02 11:22:23.0
两个小函数,表达什么意思?

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()都没有啊


----------------解决方案--------------------------------------------------------
以下是引用jarload在2007-8-2 11:22:23的发言:

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;
}

举个例子就清除了,例如unsinged char str1[]="ABCDEFG",执行xatoi_intel(str1,0,4),则结果为
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
----------------解决方案--------------------------------------------------------

  相关解决方案