如果语句被忽略,uint8_t 有问题

问题描述

值由图像给出,所以

typedef struct IMAGE{
        uint8_t  rgbtBlue;
        uint8_t  rgbtGreen;
        uint8_t  rgbtRed;
}IMAGE;
IMAGE image[height][width];

函数中,我创建了另一个二维数组。

typedef struct BUFFER{
        uint8_t  rgbtBlue;
        uint8_t  rgbtGreen;
        uint8_t  rgbtRed;
    }BUFFER;
BUFFER buffer[height][width];

计算后,我将返回值,更新图像的值。

但是我遇到了一个问题。例如:

int GxB,GyB;
buffer[i][j].rgbtBlue = round((double)sqrt(GxB * GxB + GyB * GyB));
if (buffer[i][j].rgbtBlue >= 255)
      buffer[i][j].rgbtBlue = 255;
printf("%d\n",buffer[i][j].rgbtBlue);

如果语句一直被忽略,我知道 uint8_t 一定有问题,因为在我将 rgbtBlue 更改为整数后,一切正常,if 语句正常工作。我在网上搜索过,但找不到答案。任何提示将不胜感激

解决方法

uint8_t 的最大值为 255。因此,

if (buffer[i][j].rgbtBlue >= 255)
      buffer[i][j].rgbtBlue = 255;

意思

if (buffer[i][j].rgbtBlue == 255)
      buffer[i][j].rgbtBlue = 255;

它几乎什么都不做。

您可能希望将 round() 的结果存储到更大的类型以免导致截断,然后检查该值,进行适当的处​​理并分配给 buffer[i][j].rgbtBlue,如下所示:

double round_res = round((double)sqrt(GxB * GxB + GyB * GyB));
if (round_res >= 255)
      round_res = 255;
buffer[i][j].rgbtBlue = round_res;

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...