通用:版本号位移例程

时间:2011-09-10 19:05:06

标签: java c++ algorithm

我想要社区可以设计的最佳例程,它将仅使用32位提供版本号字符串。版本号将包含三个部分:major,minor和build number。奖励业力指向包含Java源代码的答案。

更新1

好的,为了清除一些混淆,主要和次要字段应该用一个8位字节表示,并且构建号将使用剩余的位。 专业:8位 次要:8位 构建:16位 字节顺序将是小端。

标签用来表示java和/或c ++中的答案比python,ruby等更受欢迎。

更新2

示例:取一个整数(4个字节),如101020,并通过algormithmic例程运行它以生成如下输出字符串:0.1.2

Java解决方案


    public static final int versionToInt(int major, int minor, int build) {
        int ver = (major << 24) | (minor << 16) | build;
    return ver;
    }

    public static final String versionToString(int ver) {
        return String.format("%s.%s.%s", ((ver & 0xff000000) >> 24), ((ver & 0x00ff0000) >> 16), (ver & 0x0000ffff));
    }

1 个答案:

答案 0 :(得分:5)

爪哇:

class Version
{
    public char major;
    public char minor;
    public short build;

    // And the rest of your class definition ...
}

编辑:所以你想用一点移位来做它并将它存储在32位整数中(即使使用类或结构仍然会使用相同数量的存储空间)?

C中的示例函数如下

uint32_t MakeVersionNumber( int8_t major, int8_t minor, int16_t build )
{
   return ((uint32_t)major << 24) | ((uint32_t)minor << 16) | ((uint32_t)build);
}

编辑2:

Riiight我想我得到你了。你有一个32位的数字,你想得到一个字符串。所以这是C ++中的一个例子:

std::string MakeVersionString( unsigned int ver )
{
    std::stringstream ss;
    ss << ((ver & 0xff000000) >> 24) << "." << ((ver & 0x00ff0000) >> 16) << "." << (ver & 0x0000ffff);
    return ss.str(); 
}