【发布时间】:2015-03-30 07:32:04
【问题描述】:
有没有办法在 C 中访问十六进制数的某些部分?
我想编写一个函数,它接受一个十六进制数并将其取反,但保持最低有效字节不变。示例:0x87654321 应变为 0x789ABC21。
我试图以某种方式保存 LSB,然后将其应用于否定的 x,但我的问题是我的掩码被应用于所有字节。我可以将它硬编码为一个特定的值,但显然这不是我想要的。
void b(int x) {
int temp = x & 0xFF; // temp is all 0 with the LSB being the same as x's
x = ~x; // this negates x
// one of a couple of attempts I tried thus far:
// x = (x & 0x00) | temp;
// idea: change x's LSB to 00 and OR it with temp,
// changing x's LSB to temp's LSB
}
如果您不发布解决方案的代码,我将不胜感激,而只是回答是否有办法将位操作应用于十六进制数的特定部分,或者我如何解决这个问题。
【问题讨论】:
-
我对 C 不是很熟悉,那么 && 到底是做什么的呢?在 Java 或 C++ 中,这将是合乎逻辑的比较,但这在这里没有多大意义,不是吗?
-
x = (~x & ~0xFF) | (x & 0xFF); -
虽然我很欣赏指导性答案而不是一些代码,但我仍然很欣赏这一点。谢谢李,这确实有效。