如何把int*转换为int?

isfrog 2009-05-10 07:48:33
object(.o)类型的文件。里面是纯资源数据。
extern int _an_array[];//从资源文件引入。
reinterpret_cast<int>(_an_array)这个不行,但是有的人能过,我的却不能..
报错:不能转换int*到int。
但就是需要用这个值传递给函数。还有其他办法将这个值赋给int变量吗?
...全文
1189 28 打赏 收藏 转发到动态 举报
写回复
用AI写文章
28 条回复
切换为时间正序
请发表友善的回复…
发表回复
光宇广贞 2009-05-11
  • 打赏
  • 举报
回复
我觉得这个好像不是问题……

无论是多少位的内核,int*就是int。
32位下int是4个字节,指针就是32位4字节。
64位下int将是8个字节,指针就是8个字节。

我从来都是直接把指针拿过来就int,因为对于C来说,指针就是整型啊……

指针是不可能越过整型的,因为指针就是用整型来表示的。
isfrog 2009-05-11
  • 打赏
  • 举报
回复
因为那个库的函数接受int型参数,所以要吧int*转换为int,就是这样
数组貌似是懂一点..
1,上面所说的_binary_gui_glade_size[0]并不是我需要的,而要的是 _binary_gui_glade_size(这个指针的地址值) =>int..
2,它给出的并不是整数(起码不是int型)。错误是在这里发生的,强制转换int*(8位)=>int(4位),就这样出错了。
3,奇怪的是它给我的感觉不像数组...

很想知道这样的object文件使用规则..
Sou2012 2009-05-11
  • 打赏
  • 举报
回复
[Quote=引用 25 楼 liuyuguang100 的回复:]

1 河北南宫市三利毛毡厂
我公司主要生产高、中、低各种规格工业毛毡,细白羊毛毡,白针刺毡,色针刺毡,彩色工业毡,压花毛毡,异型毡,书画毡,民用毡,抛光毡,鞋垫毡,防寒毡,毡圈,毡昵,毡垫,毡套,毡筒,毡件等毛毡制品,还可根据用户样品,图纸要求制作各种不同规格毛毡及毛毡制品。国内外新老用户所需要的就是我们努力要做到的。
本公司一直本着“质量是足、诚信是路、企业要发展”这个原则和理念,带着求实创…
[/Quote]

。。太牛了吧
「已注销」 2009-05-11
  • 打赏
  • 举报
回复
ghggggggggggggggggggggggggggggg
taoyanxu1989 2009-05-11
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 arong1234 的回复:]
我觉得先别忙给楼主建议怎么转,而是要弄清楚他为什么要这么转。
最直观的就是_an_array[0]之类的数组下标方式存取,但是楼主为什么这么简单的也不知道呢?也许他有什么特殊要求
[/Quote]
SimonYeung 2009-05-11
  • 打赏
  • 举报
回复
学习
jinye_kim 2009-05-11
  • 打赏
  • 举报
回复
学习
isfrog 2009-05-11
  • 打赏
  • 举报
回复
我开始也是这样用的呀
sizeof(int) 是4
sizeof(int*)是8
起码在我这机器上是这样的。
arong1234 2009-05-10
  • 打赏
  • 举报
回复
你到底想用哪个值?人家给你的是一堆整数,而你却要整数,是那一堆整数中的一个,还是几个?所谓的“数组”的概念你到底知道不知道,知道的话“数组”是什么?如果我这些问题你回答不了,回答下去觉得也没有什么意义
[Quote=引用 9 楼 isfrog 的回复:]
我从头讲一下吧。。

生成了gui.o文件



C/C++ codeld -r -b binary -o gui.o gui.glade



nm gui.o显示:


C/C++ code000000000000231f D _binary_gui_glade_end
000000000000231f A _binary_gui_glade_size
0000000000000000 D _binary_gui_glade_start



程序中


C/C++ codeextern int _binary_gui_glade_size[];
cout<<_binary_gui_glade_size<<endl; //这里会输出0x231f



但是我想使…
[/Quote]
isfrog 2009-05-10
  • 打赏
  • 举报
回复
恩,强制转换成long是可以的。
就这样吧,最后唱首歌庆祝一下。请大家捧场...
:D

http://tieba.baidu.com/f?kz=571691233
kolige 2009-05-10
  • 打赏
  • 举报
回复
实在不行,用联合体试试,或者左端强制类型转换
isfrog 2009-05-10
  • 打赏
  • 举报
回复
_an_array[0]这种都不沾边了,呵呵,因为本来要的就是_an_array这个指针的地址值

也许在32位下是不会遇到这种情况的。
信念 2009-05-10
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 goodname 的回复:]
int *p = reinterpret_cast <int *>(_an_array);

printf("%d",p[0]);
[/Quote]
reinterpret_cast这个关键字就是用来处理这种情况,其他还没见过
isfrog 2009-05-10
  • 打赏
  • 举报
回复
sizeof(int) //4
sizeof(int*) //8
sizeof(long) //8

是不是这个缘故?
isfrog 2009-05-10
  • 打赏
  • 举报
回复
是不是跟系统的位有关系,我的是amd64架构。
刚才发现int i = (int)((long)(_an_array))是可以的。
isfrog 2009-05-10
  • 打赏
  • 举报
回复
强制转换不成。。
cast from ‘int*’ to ‘int’ loses precision
kingstarer 2009-05-10
  • 打赏
  • 举报
回复
int p = (int) (&_binary_gui_glade_size[0]);

强制转换
kingstarer 2009-05-10
  • 打赏
  • 举报
回复
int p = &_binary_gui_glade_size[0];
isfrog 2009-05-10
  • 打赏
  • 举报
回复
我从头讲一下吧。。

生成了gui.o文件


ld -r -b binary -o gui.o gui.glade


nm gui.o显示:

000000000000231f D _binary_gui_glade_end
000000000000231f A _binary_gui_glade_size
0000000000000000 D _binary_gui_glade_start


程序中

extern int _binary_gui_glade_size[];
cout<<_binary_gui_glade_size<<endl; //这里会输出0x231f


但是我想使用这个值,因为函数的参数类型需要int, reinterpret_cast<int>(_binary_gui_glade_size)行不通(难道是编译器有问题?)
提示:cast from ‘int*’ to ‘int’ loses precision


------------------------
如果开头extern int* ....运行时段错误
_binary_gui_glade_size[0]也是不存在的。同样段错误。
isfrog 2009-05-10
  • 打赏
  • 举报
回复
不行的,cout<<_an_array[0];编译能过,但运行时报“段错误”。

搞不懂,为什么外部引用需要这样声明。看起来就不是平时见到的指针,而是存储了一个固定的数字。
加载更多回复(7)

64,648

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧