月半子的博客

在低谷里徘徊
随笔 - 4, 文章 - 0, 评论 - 12, 引用 - 0
数据加载中……

有点强悍的字节倒序函数?【经典】

今天看代码的时候看到的,研究了一下,分享给大家。

    template<size_t T>
        inline 
void convert(char *val)
    {
        std::swap(
*val, *(val + T - 1));
        convert
<- 2>(val + 1);
    }

    template
<> inline void convert<0>(char *val) {}
    template
<> inline void convert<1>(char *val) {}         // ignore central byte

posted on 2008-11-19 20:16 月半子 阅读(3421) 评论(9)  编辑 收藏 引用

评论

# re: 谁能写出更短的字节倒序函数?【经典】  回复  更多评论   

/** ByteConverter reverse your byte order. This is use
for cross platform where they have different endians.
*/
2008-11-19 20:18 | 月半子

# re: 有点强悍的字节倒序函数?【经典】  回复  更多评论   

仔细想了下,原来不强悍

只是我模板没学好,惭愧
2008-11-19 20:26 | 月半子

# re: 有点强悍的字节倒序函数?【经典】  回复  更多评论   

模板元编程?
cpp设计新思维才叫牛b
2008-11-19 22:03 | haohao06

# re: 有点强悍的字节倒序函数?【经典】  回复  更多评论   

convert<100>( ... )
{
convert<98>()
convert<96>()
convert<94>()
convert<92>()
......... N extand
convert<2>()
}
说真的,这个函数除了看起来漂亮,我真的不觉得有什么好的
2008-11-19 22:26 | LOGOS

# re: 有点强悍的字节倒序函数?【经典】  回复  更多评论   

@LOGOS
而且效率也不高。
2008-11-20 08:55 | cooelaf

# re: 有点强悍的字节倒序函数?【经典】  回复  更多评论   

效率不高么?包括std::swap和inline convert都会展开的
还能多高?
这里可是少了循环的控制变量哦
2008-11-20 09:47 | 夜弓

# re: 有点强悍的字节倒序函数?【经典】  回复  更多评论   

只能说用处不大,代码狂傻
2008-11-20 09:48 | xiaoxiao

# re: 有点强悍的字节倒序函数?【经典】  回复  更多评论   

狂傻还不至于吧,要补充下,主要不是倒换字节数组,是倒换常用类型的字节顺序(考虑跨平台),所以T不会太大。

其次,内联展开以后,效率还是很好的
2008-11-20 09:51 | 月半子

# re: 有点强悍的字节倒序函数?【经典】  回复  更多评论   

还好,也没什么~
2008-11-21 10:28 | meta

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理