繁体   English   中英

从无符号到有符号的便携式转换 C++

[英]Portable conversion from unsigned to signed in C++

我有std::vector<unsigned short int> vals ,我需要反转字节的顺序(假设为 2)并将它们存储为short int 我这样做是:

std::vector<short int> result;
for(unsigned short int& x : vals) {
    x = ((x << 8) | (x >> 8));
    result.push_back(static_cast<short int>(x));
}

在线阅读,我发现static_cast具有实现定义的行为。 我还找到了std::bit_cast ,它保留了这些位并以新类型解释它们。

这是否意味着使用上面的std::bit_cast<short int>(x)应该优于static_cast

我试过了,两者都给了我相同的结果。 假设bit_cast会给使用我的代码的其他人提供相同的结果,而static_cast可以给他们不同的结果是否正确?

如果您想处理字节 - 您不应该将它们转换为非字节类型(尤其不是short int和朋友,因为它们不需要完全是 16 位)。 您应该将字节读取为charstd::byte数组。 然后,您可以以安全且可移植的方式交换这些值。 以可移植的方式将这些字节转换为数字类型是不可行的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM