能力值:
( LV12,RANK:600 )
2 楼
我晕了...我觉得应该会是这样但觉得又不大可能那样...
能力值:
( LV2,RANK:10 )
3 楼
不知道你用p + 66A0是出于什么目的,不过在c和c++里,指针相加是没有意义的,指针相减表示两个地址之间的单元个数。
比如有一个int数组 int iarray[10];
有一指针指向iarray[4] int *p = &(iarray[4]);
那么 p - iarray 的结果为4.
而指针相加就没有任何意义。如果66A0是一个偏移,直接用十进制不久可以,为何要转换成16进制?最后36转换成0x36就是0x36,没有问题!
能力值:
( LV2,RANK:10 )
4 楼
#include <iostream>
using namespace std;
int main(){
int iarray[15] = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
int *p4 = iarray + 0x000A;
cout << *p4 <<endl;
cout << p4 - iarray << endl;
return 0;
}
输出为:
11
10
能力值:
( LV2,RANK:10 )
5 楼
汗 没看清意思~
能力值:
( LV13,RANK:760 )
6 楼
楼上的做法是错误的,如果按楼上的这么做,那得到的结果将是36的十六进制 0x24,嘿嘿
下面给出一个我的做法: int i = 1, n = 36;
int k = n /10;
while (k) //求出n的长度
{
i++;
k = k /10;
}
char *p = new char[i+1]; //分配Len(n)+1的字串长度
ZeroMemory(p, i+1);
itoa(n, p, 10); //将整数转化为字串
sscanf(p, "%x", &k); //将字串转化为十六进制数
delete p;
//k就是转化后的十六进制整数,比如说是36,那么k=54(十进制)=36(十六进制)
能力值:
( LV2,RANK:10 )
7 楼
感谢大家的回答
能力值:
( LV13,RANK:760 )
8 楼
其实按照十六进制的算法来进行,效率可能更高一点,将 n = 36 直接转为 k = 3*16+6;
就行了。下面是另一种算法:
int n = 36;
int j = 0, k = 0;
CString str;
str.Format("%d", n);
for(int i = str.GetLength(); i>0 ; i--)
{
k += atoi(str.Mid(j++, 1).GetBuffer(0))*pow(16, i-1);
}
能力值:
( LV2,RANK:10 )
9 楼
不需要先转字符串,再字符串到int吧,那样效率太低了...
实际上就是把一个16进制的数转换为10进制的数。
36 => 0x36 = 3*16 + 6
234=> 0x234 = 2*16*16 + 3 * 16 + 4
unsigned int Hex2Dec(int hex)
{
unsigned int result = 0, power = 0;
while( hex > 0 )
{
result += (hex % 10) << power;
hex = hex/10;
power += 4;
}
return result;
}
能力值:
( LV13,RANK:760 )
10 楼
引入CString类,再次简化:
int n = 36;
CString str;
str.Format("%d", n);
sscanf(str.GetBuffer(0), "%x", &n); //4行代码搞定,效率也不错。n就是转化后的结果。
能力值:
( LV2,RANK:10 )
11 楼
你这个只能说简化了写代码的效率,而不是简化了代码的执行效率哈
能力值:
( LV13,RANK:760 )
12 楼
呵呵,以最简洁的方式写出代码,也是另一种效率吧
能力值:
( LV2,RANK:10 )
13 楼
呵呵,没有注意到你是在简化8楼的代码,以为你是说10楼的代码是9楼的简化。
能力值:
(RANK:350 )
14 楼
char buf[2];
int a=36;
ssprintf(buf,"%d",a);
sscanf(buf,"%x",&a);
variable a was converted from 36D to 36H now
能力值:
( LV9,RANK:420 )
15 楼
楼上方法不错,膜拜
能力值:
( LV2,RANK:10 )
16 楼
呵呵,这个帖子我全能看懂。
能力值:
( LV2,RANK:10 )
17 楼
学习了 ..嘿嘿
能力值:
( LV2,RANK:10 )
18 楼
[QUOTE=stalker;603523]char buf[2];
int a=36;
ssprintf(buf,"%d",a);
sscanf(buf,"%x",&a);
variable a was converted from 36D to 36H now
...[/QUOTE]
学习了 不错..
能力值:
( LV2,RANK:10 )
19 楼
3Q ..
感谢你的帮助