我想要社区可以设计的最佳例程,它将仅使用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));
}
答案 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();
}