C:比较两个字节看一个是否在另一个的一定范围内

标签 c byte

我正在编写比较代表整数的 2 个字节的代码。我想看看字节 R 是否与 G 的 +-10 一致。我在代码中遇到的问题是在接近尾声的 if 语句中进行比较。字节永远不会超出范围,即使它们应该超出范围。我确定问题出在我如何添加/减去 error_range,但我不知道有任何其他方法可以做到这一点。

我首先考虑将字节转换为整数,但我在网上找不到任何帮助。如果这比我在这里做的更好,请告诉我怎么做。

感谢任何帮助!

const char ERROR_RANGE = 0x1010; //warning: overflow in implicit constant conversion
char R, G; /2 separate bytes
char buffer; //enough space for 1 byte

image = fopen(fileName,"r"); //open file

fread(&buffer, 1, 1, image); //read 1 byte  
memcpy (&R,&buffer,1); //store it as R

fread(&buffer, 1, 1, image); //read 1 byte   
memcpy (&G,&buffer,1); //store it as G

fclose(image);

if((R >= (G + ERROR_RANGE)) && (R <= (G - ERROR_RANGE)))
{
    printf("Outside of range!\n");
}

谢谢。

最佳答案

你的问题是因为你的测试说:

if (R is greater than or equal to G + ERROR) AND (R is less than or equal to G - ERROR)

不可能两者兼而有之。

首先将&&替换为||

更好的测试是:

if (the difference of R and G is greater than ERROR)

转化为:

if (abs(R - G) > ERROR_RANGE)
{
    printf("Error");
}

关于C:比较两个字节看一个是否在另一个的一定范围内,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1917770/

相关文章:

c - C 程序中对 '' main 的 undefined reference

python - 字节和整数以及连接和 python

Java 向文件写入字节和从文件读取字节

c - 编码(marshal)处理/解封处理与序列化/反序列化之间有什么区别?

c - 以数组作为参数的堆栈跟踪错误

C/Linux : How to get users login name without `getlogin`

c - RSA 十六进制 key 转换为 PEM 格式

c - 带有图形的程序被中止,即使调用了 XInitThreads

java - 在netty服务器中读取JSON数据

java - 调整 byte[] 二进制补码表示的整数的大小