首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何将组合标志的结果反转为标志?

如何将组合标志的结果反转为标志?
EN

Stack Overflow用户
提问于 2019-12-06 21:44:49
回答 3查看 134关注 0票数 1

我正在开发一个3ds max简单插件。有一个函数返回一个名为"MAX_Version“的标志

它是一个3枚举的组合,就像旗帜.

  1. 3ds最大释放号
  2. 3ds Max SDK当前版本号
  3. 3ds Max对给定API的SDK的修订

下面是结果和最终值:

代码语言:javascript
运行
复制
#define VERSION_3DSMAX ((MAX_RELEASE<<16)+(MAX_API_NUM<<8)+MAX_SDK_REV)

以下是定义:

代码语言:javascript
运行
复制
#define MAX_RELEASE      MAX_RELEASE_R22    /// Value of MAX_RELEASE_R22 is 22000
#define MAX_API_NUM      MAX_API_NUM_R220   /// Value of MAX_API_NUM_R220 is 55
#define MAX_SDK_REV                 0 

现在,在3ds max SDK头中定义了很多这样的代码:

代码语言:javascript
运行
复制
//! 3ds Max R18 (2016) Preview release id
#define MAX_RELEASE_R18_PREVIEW     17900
//! 3ds Max R18 (2016) release id
#define MAX_RELEASE_R18     18000
//! 3ds Max R19 (2017) Preview release id
#define MAX_RELEASE_R19_PREVIEW     18900
//! 3ds Max R19 (2017) release id
#define MAX_RELEASE_R19     19000
//! 3ds Max R20 (2018) Preview release id
#define MAX_RELEASE_R20_PREVIEW     19900
//! 3ds Max R20 (2018) release id
#define MAX_RELEASE_R20     20000
//! 3ds Max R21 (2019) Preview release id
#define MAX_RELEASE_R21_PREVIEW     20900
//! 3ds Max R21 (2019) Preview 2 (ShapeObject revisions)
#define MAX_RELEASE_R21_PREVIEW2    20901
//! 3ds Max R21 (2019) release id
#define MAX_RELEASE_R21     21000
//! 3ds Max R22 (2020) Preview release id
#define MAX_RELEASE_R22_PREVIEW     21900
//! 3ds Max R22 (2020) release id
#define MAX_RELEASE_R22             22000

现在,我的问题是如何将结果值反转为一个数字来获得这些标志?有什么办法吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-12-06 21:55:04

以宏的形式,逆变换如下:

代码语言:javascript
运行
复制
#define MAX_SDK_REV_V (VERSION_3DSMAX & 0xFF)
#define MAX_API_NUM_V ((VERSION_3DSMAX >> 8) & 0xFF)
#define MAX_RELEASE_V ((VERSION_3DSMAX >> 16) & 0xFFFF)

您可以轻松地将它们转换为函数。

演示

票数 2
EN

Stack Overflow用户

发布于 2019-12-06 21:50:42

要获得nmunsigned i位,请执行以下操作:

代码语言:javascript
运行
复制
(i>>n)%(1 << (m-n));

(也许我被淘汰了一次,但大致如此)。将数字第一n移到右边,这将移除n-th的所有字节。然后你必须切断你想要的上面的所有数字,现在是n-m-th,为此你需要用2^(n-m)来调制它。

票数 0
EN

Stack Overflow用户

发布于 2019-12-06 22:02:49

代码语言:javascript
运行
复制
int flag = MAX_RELEASE_R18_PREVIEW; // 17900

// MAX_SDK_REV
int a = (flag & 0xff); // 236

// MAX_API_NUM
int b = (flag & 0xff00) >> 8; // 69

// MAX_RELEASE
int c = (flag & 0xff0000) >> 16; // 0
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59220716

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档