免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3956 | 回复: 4
打印 上一主题 下一主题

小弟我急切地求教一个问题:64位整型的字节序转换 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-11-29 16:24 |只看该作者 |倒序浏览
我的问题是这样的:

我需要使用Win32的__int64数据类型和linux的long long数据类型来在各自平台上表达64位整数

__int64和long long都需要通过网络进行传输,因此肯定需要字节序转换

问题是这两个类型的字节序转换好象没有现成的,需要自己来实现

我就不知道这两个数据类型是怎么实现的,比方说如果__int64是个结构体的宏定义,那实现方法就不一样了

所以在此求教 大家多捧场

论坛徽章:
0
2 [报告]
发表于 2007-11-29 16:44 |只看该作者
t_uint32 ByteOrder::FlipBytes(t_uint32 val)
{
                return (
                                ((val >> 24) &0x000000FF)|
                                ((val >> & 0x0000FF00)|
                                ((val << & 0x00FF0000)|
                                ((val << 24) & 0xFF000000)
                                );
}

t_uint64 ByteOrder::FlipBytes(t_uint64 val)
{
                t_uint32 hi = t_uint32( val >> 32);
                t_uint32 lo = t_uint32(val  & 0xFFFFFFFF);

                t_uint64 fhi = t_uint64(FlipBytes(hi));
                t_uint64 flo = t_uint64(FlipBytes(lo));

                flo <<= 32;
                return (flo | fhi);

}

论坛徽章:
0
3 [报告]
发表于 2007-11-29 16:49 |只看该作者
原帖由 Solidus 于 2007-11-29 16:44 发表
t_uint32 ByteOrder::FlipBytes(t_uint32 val)
{
                return (
                                ((val >> 24) &0x000000FF)|
                                ((val >> & 0x0000FF00)|
                                ((val  32);
                t_uint32 lo = t_uint32(val  & 0xFFFFFFFF);

                t_ui ...



字节序转换的时候,有符号数和无符号数的处理有区别么??

[ 本帖最后由 Jass 于 2007-11-29 17:01 编辑 ]

论坛徽章:
0
4 [报告]
发表于 2007-11-29 17:17 |只看该作者
和有无符号没有关系.
而且似乎也用不着管它是宏还是结构体, 无论如何它在内存里如何存放是确定的.

我想着应该有现成的这种的函数.

[ 本帖最后由 chenzengjie 于 2007-11-29 17:18 编辑 ]

论坛徽章:
0
5 [报告]
发表于 2007-11-29 17:33 |只看该作者
ls说的是,这玩意的正确性就是取决于cpu的读法,所谓的符号也只是最高位的一个标记,所以只要相应字节的位整对了就可以了
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP