首页 > 解决方案 > C 中的 Int8_t 到 Int16_t 转换

问题描述

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

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

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

有符号字符数据必须先转换为无符号字符,然后才能分配或转换为更大的有符号类型。此规则适用于在 char 被定义为具有与有符号字符相同的范围、表示和行为的实现上的有符号字符和(纯)字符字符。 来源网站

我用 Dev-C 在我的电脑上尝试了同样的转换

我的代码是:

#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 按任意键继续。. .

所以,我看这里没问题。为什么需要转换为 char?

谢谢。

标签: cinteger

解决方案


当他们说“字符数据”时,他们指的是文本。文本字符不能为负数,因此他们提供了有关确保例如 ISO 8859 格式的代码保持在 0-255 范围内的提示。

由于您正在处理实际的签名数字,因此请忽略建议并直接从int8_tto 转换int32_t


推荐阅读