免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: jeanlove
打印 上一主题 下一主题

[C++] [10分求程序]实现一个Integer类,总是4字节大小 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-12-10 17:58 |显示全部楼层 |倒序浏览
10可用积分
如题,求一个c++类的实现代码(或者方法/思路),就像Java的int和Integer那样,无论哪个平台上面云运行,16/32/64位的平台上面,这个c++的Integer类都是存储一个4字节的整形数,而且能够调整endian的表示方式。

希望能看到一个简洁明确的实现,谢谢啦!!!

论坛徽章:
0
2 [报告]
发表于 2008-12-10 18:28 |显示全部楼层
原帖由 tyc611 于 2008-12-10 18:15 发表
需要支持哪些操作?以前写了个,但不高效,如果要高效的还是用别人的库吧

有这样的库么? 能否介绍1-2个(不要太庞大的,像ACE那种的,东西太多,累死了).
只需要保证存储4字节的整数,保证能在16位平台就转换为long类型,在64位平台就转换为4字节的int类型
Integer I;
long l=(long)I;//16位平台代码
int i=(int)i;//64位平台代码
就行了,重载操作符的方法我知道,但是在代码里面怎么区分平台呢? 有没有pragma之类的命令选项能实现这一功能? 我不想通过在代码里面定义一堆宏然后在编译选项里面根据平台信息去确定用D_16bit D_32bit这样的编译选项。

谢谢啦!

论坛徽章:
0
3 [报告]
发表于 2008-12-10 18:44 |显示全部楼层
原帖由 tyc611 于 2008-12-10 18:35 发表
我前面理解偏了,你要的Integer只存放一个4字节大小的整数?我开始以为你要一个存放4的整数倍大小的大数类
你的需求不需要类吧?只需要用条件编译为各个平台上的4字节整形类型定义一个类型别名Intger即右?


用条件编译可以.这样最简单。

或者用类Integer实现,构造函数用省略号,能满足以下条件的就行了:
1.  总是存储4字节大小
2.  能调整存储的endian方式,是低位在前还是高位在前 set_big_endian(bool big_endian=true)
3.  能通过重载运算符或者函数调用to_4byteint()返回一个4字节的整数,在16位平台返回long,在32/64位平台返回int

谢谢!

[ 本帖最后由 jeanlove 于 2008-12-10 18:46 编辑 ]

论坛徽章:
0
4 [报告]
发表于 2008-12-10 21:31 |显示全部楼层
原帖由 tyc611 于 2008-12-10 19:04 发表
如果用类实现,你的to_4byteint()在不同的平台接口有所不同(返回类型)?这还得用条件编译
类内部实现还得用条件编译(根据不平编译器平台先用不同的底层类型)
我觉得没必须实现为类,用类型别名,再加一个 ...

dx能具体写一下么? 条件编译#ifdef能判断平台的位数?

谢谢!

论坛徽章:
0
5 [报告]
发表于 2008-12-11 10:02 |显示全部楼层
原帖由 tyc611 于 2008-12-10 22:04 发表
在32位和64位平台上,一般int都是32位,在16位平台上用long
有些编译器还提供指定宽度的类型,比如VC里的__int32就肯定是32位
根据你支持的目标平台写就行了

可是我在*nix环境下呀,没有__int32这样的数据类型。我怎么定义它?

论坛徽章:
0
6 [报告]
发表于 2008-12-11 10:43 |显示全部楼层
原帖由 cling6394 于 2008-12-11 10:39 发表

没有特别好的办法,用条件编译的方法会导致程序难以理解和修改。可以考虑自动代码生成,这也是现在最流行的方法
可以这样:
写一个命令或者脚本,例如就叫mycmd,在32位系统下输出32,在64位系统下输出64, 1 ...

谢谢,这个很强大很好用!!!

论坛徽章:
0
7 [报告]
发表于 2008-12-11 11:12 |显示全部楼层
原帖由 yulc 于 2008-12-11 11:01 发表
没太理解,为什么不这样呢?

class Int32
{
private:
    char _data[4];

public:
    构造,析构等等方法...

};


这样,我类的大小就肯定是 4字节,这_data用来存储就可以.

实现出来会不会很低效呢... ...每次int的操作充满了函数的调用,字节的拷贝... ...
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP