[英]Int8_t to Int16_t Conversion in C
我的项目中有一个 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);
}
而 output 似乎没有问题存在:
-3
-3
进程在 0.0807 秒后退出,返回值 4 按任意键继续。 . .
所以,我看这里没问题。 为什么需要转换为 char?
谢谢。
当他们说“字符数据”时,他们指的是文本。 文本字符不能为负数,因此他们提供了有关确保例如 ISO 8859 格式的代码保持在 0-255 范围内的提示。
由于您正在处理实际的签名数字,因此请忽略建议并直接从int8_t
为int32_t
。
如果您阅读了您链接到的引用 CERT-C 规则,则实际关注的是在算术或存储原始值时使用char
类型。 他们还关心隐式类型提升。 有关这些问题的更多信息,请参阅这些帖子:
您的表达式int32_t b_32 = (int32_t) b;
. 值得注意的是, b
不是char
类型。 无需转换为无符号 - 代码很好。 演员阵容也不需要。 您的工具给出了误报。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.