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.我想这就是让我失宠的原因. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |