首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C语言中的Int8_t到Int16_t转换

问C语言中的Int8_t到Int16_t转换
EN

Stack Overflow用户
提问于 2021-03-03 13:04:14
回答 2查看 865关注 0票数 1

我的项目中有一个C代码。在部分代码中,我直接使用了从int8_t到int32_t的转换,并进行了多空间分析。

在多空间分析中,它说这很容易出错,我需要先转换为char而不是int32_t,我不太明白为什么需要这样做。

此外,我在下面的链接中也看到了类似的表达:

在分配或转换为更大的有符号类型之前,必须将符号字符数据转换为无符号字符。此规则适用于实现中的有符号字符和(纯)字符,其中char定义为具有与签名char相同的范围、表示形式和行为。源网站

我已经在我的个人电脑上用开发-C进行了同样的转换。

我的代码是:

代码语言:javascript
复制
#include <stdio.h>
#include <stdint.h>
void main(void)
{
    int8_t b = -3;
    int32_t b_32 = (int32_t) b;
    printf("%d \n",b);
    printf("%d \n",b_32);
}

产出似乎不存在任何问题:

-3

-3

进程在0.0807秒后退出,返回值为4,按任意键继续。。。

所以,我觉得这没问题。为什么需要转换成焦炭?

谢谢。

EN

回答 2

Stack Overflow用户

发布于 2021-03-03 13:08:18

当他们说“字符数据”时,他们指的是文本。文本字符不能是负的,所以他们给出了确保代码在0-255范围内的提示,例如ISO 8859格式的代码。

因为您处理的是实际的签名号码,所以不要理会这个建议,直接从int8_t转换到int32_t。

票数 1
EN

Stack Overflow用户

发布于 2021-03-03 13:52:18

如果您阅读了链接到的所引用的CERT规则,实际需要考虑的是在算术中或在存储原始值时使用char类型。他们也关注隐性类型的推广。有关这些问题的更多信息,请参见这些帖子:

在默认情况下,char是签名还是未签名?

隐式类型提升规则

在表达式int32_t b_32 = (int32_t) b;中,没有任何与char或隐式整数提升的签名性相关的问题。值得注意的是,b不是char类型的。没有必要转换为无签名-代码是好的。演员也不需要。你的工具是假阳性。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66457671

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档