我想知道是否有人可以帮助我。我是新手,只是学习。所以这个问题似乎很困惑。我有一个unsigned int值,我需要将其拆分为字节,然后xor某些字节,然后得到结果。我想将值表示为(0,a0⊕a1,a2⊕a3,0)。
十进制值= 62910759或十六进制值= 3BFF127;
unsigned int value = 62910759;
// W =(0,a0⊕a1,a2⊕a3,0);
unsigned int L = 0x04000000L^ W ;
答案 0 :(得分:4)
我不知道这是否对你有所帮助,但我首先计算字节然后对其中的一些进行异或运算:
unsigned int value = 62910759;
unsigned char a = value >> 24 & 0xFF; // First byte/ high byte
unsigned char b = value >> 16 & 0xFF;
unsigned char c = value >> 8 & 0xFF;
unsigned char d = value & 0xFF; // Last byte/ smallest byte
printf("%.2X %.2X %.2X %.2X\n", a,b,c,d);
unsigned char aXORb = a^b; // a XOR b
unsigned char bXORc = b^c;
unsigned char cXORd = c^d;
unsigned char dXORa = d^a;
printf("%.2X %.2X %.2X %.2X\n", aXORb,bXORc,cXORd,dXORa);
输出:
03 BF F1 27
BC 4E D6 24
注意:我认为uint8_t会更像“C-like”,但无论如何结果都是一样的。
@Jimbo Jones这是最后一步。零是不必要的,但我将它们包括在内以便更好地理解代码。
unsigned int result = (0x00 << 24) + (aXORb << 16) + (cXORd << 8) + 0x00;
Method(0x02000000L^ result);
如果你的意思是W =(0,a0⊕a1,a2⊕a3,0),那么前8位是0而下一个8是XOR b,依此类推。