用C语言检查二进制文件中特定位置的位值

标签 c gcc binary

我不知道为什么,我尝试了在堆栈中找到的所有实现,但每个实现都有这种奇怪的行为。

我的目标是:给定一个小数,将其更改为二进制并在给定位置值检索一位。

假设我得到了这个二进制数,即十进制 255:

11111111

很好用这个:

#define CHECK_BIT(var,pos) ((var) & (1<<(pos)))//other test
#define NCHECK_BIT(int, pos) (!! int  & (1 << pos))
unsigned char* REG_SW ;

//from int to binary
unsigned int int_to_int(unsigned int k) {
    return (k == 0 || k == 1 ? k : ((k % 2) + 10 * int_to_int(k / 2)));
}

int checkBitPosition(){ 
    REG_SW = (unsigned char*) 0x300111;
    return NCHECK_BIT(int_to_int(REG_SW [0]),6)==false?1:0 ;
}

如果该位在第六位为 0,但在第二位(还有其他一些......实际上!!),它会返回 true,所以结果是不可预测的......我没有得到结果背后的逻辑。 我认为 int 到二进制转换器工作得很好,因为我正在打印它,并且它始终是从我给出的 int 中获取的正确二进制文件。

有人可以帮我吗?

提前致谢!

最佳答案

您首先将数字转换为其二进制格式,然后使用宏检查该二进制格式。这是错误的,因为您的宏将检查结果数字(而不是原始数字)中的位位置,即,

首先您的数字= 10,二进制格式为1010 现在要检查您必须传递 10 作为宏参数的位,而不是 1010

如果将二进制表示形式 1010 传递给宏,则将检查数字 1010 的二进制表示形式是否为 pos,而不是 10 .

关于用C语言检查二进制文件中特定位置的位值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27658149/

相关文章:

c - 在 MacOS El Captain 上使用 gcc 编译时未找到库

c - 如何使用C逐行读取txt文件(int,未知长度)?

c - 如何告诉 gcc 禁用结构内的填充?

c - 如何避免普通 "char"到 : "unsigned char" OR "signed char" conversion? 的 gcc 警告

haskell - 为什么包装 Data.Binary.Put monad 会导致内存泄漏? (第2部分)

binary - 在Scheme中将递归函数转换为尾递归函数

c - C 中的段错误和矩阵问题

c - 如何使用 C 头文件和 CUDA 代码编译 C 代码?

c++ - 你如何将迭代器作为 hash_map 的键?

haskell - 如何在其他机器上运行 ghc 编译的二进制文件?