加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

C:如何将int转换为unsigned long而不更改任何位?

发布时间:2020-12-16 10:29:46 所属栏目:百科 来源:网络整理
导读:C:如何将int转换为unsigned long而不更改任何位? 我想打包并将值解压缩到内存中.字大小为64位. 此代码段说明了此问题: int v1 = -2; // 0xfeunsigned long v2=(unsigned long)v1; // 0xfffe,I want 0x00fe 简单的解决方案是: unsigned long v2=(unsigned
C:如何将int转换为unsigned long而不更改任何位?
我想打包并将值解压缩到内存中.字大小为64位.

此代码段说明了此问题:

int v1 = -2; // 0xfe
unsigned long v2=(unsigned long)v1; // 0xfffe,I want 0x00fe

简单的解决方案是:

unsigned long v2=(unsigned int)v1; // 0x00fe

但是,此代码位于模板中,其中目标类型是参数,因此我不得不诉诸于此:

uint64 target = mem[index] & mask;
uint64 v;
if (value < 0) {
    switch (bits) {
    case 8:
        v = (uint8)value;
        break;
    case 16:
        v = (uint16)value;
        break;
    case 32:
        v = (uint32)value;
        break;
    }
} else {
    v = value;
}
v = v << lShift;
target |= v;
mem[index] = target;

例如,假设“value”的类型是int(16位)和bits = 16.
目标是屏蔽内存中的位值并替换它们.

有谁知道更简单的方法?

解决方法

假设你有C 0x支持:

#include <type_traits>
v= static_cast<std::make_unsigned<decltype(value)>::type>(value);

我假设您正在参数化值的类型,否则这没有任何意义.

编辑:通过使用static_cast而不是C cast来使其更具C -ish.我想这就是让我失宠的原因.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读