gpt4 book ai didi

c++ - 至少有时将 uint8_t 转换为 signed int 是不正确的吗?

转载 作者:行者123 更新时间:2023-11-30 01:07:17 27 4
gpt4 key购买 nike

在阅读以下问题的答案时

Getting a buffer into a stringstream in hex representation:

我不明白为什么有必要投uint8_tunsigned (或者,如评论中所写,甚至到 unsigned char 之前),同时仅转换到 int不正确。

据我所知,根本没有转换会导致解释 uint8_t作为基础类型,它可以(必须?)是 3 char 的一部分变体,然后将其打印为字符。

但是转换为 int 有什么问题呢? ?任何uint8_t值应始终适合 int ,因此转换似乎很简单。为什么符号扩展会使代码不正确(在评论中提到)?

更新:

仅供引用,我认为我提到的问题中谈到的是signed char的案例。 :

signed char num = -1;
std::cout << std::hex << static_cast<unsigned int>(static_cast<unsigned char>(num));

这可以写成大于 2 f s 在没有第二个 Actor 的情况下。

关于 2 的补码系统的观点似乎不正确,因为整数转换应该适用于将 -1 转换为 unsigned <smth> ,并且它遵循 2 的补码系统(即,当转换为例如 uint8_t 时,结果应始终为 255,因此打印为 0xff,即使具有不同的位模式)。

最佳答案

你是正确的,将 uint8_t 转换为 int 将产生与将 uint8_t 转换为 unsigned int 完全相同的值>。一个简单的循环来测试 uint8_t 的所有可能值,0 ... 255,将确认生成的字符串 100% 相同,并且假定所有实现都必须支持 int值甚至高于 255,就不可能出现一些模糊的实现,其中有限范围的 int 可能会导致问题。

关于c++ - 至少有时将 uint8_t 转换为 signed int 是不正确的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44892781/

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