gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:58:28 27 4
gpt4 key购买 nike

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);

我假设您正在对 value 的类型进行参数化,否则这没有任何意义。

编辑:通过使用 static_cast 而不是 C cast 使其更像 C++。我想这就是让我投反对票的原因。

关于C++:如何将 int 转换为 unsigned long 而不更改任何位?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6963534/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com