对 c 中的某些字节进行异或

Jim*_*nes 1 c cryptography xor

我想知道是否有人可以帮助我。我是c新手,只是学习。所以这个问题可能看起来很混乱。我有一个无符号 int 值,我需要将其拆分为字节,然后将某些字节异或在一起,然后得到结果。我想将值表示为 (0, a0 \xe2\x8a\x95 a1,a2 \xe2\x8a\x95a3,0)。

\n\n

十进制值 = 62910759 或十六进制值 = 3BFF127;

\n\n
unsigned int value = 62910759;\n
Run Code Online (Sandbox Code Playgroud)\n\n

// W = (0, a0 \xe2\x8a\x95 a1,a2 \xe2\x8a\x95a3,0);

\n\n
unsigned int L = 0x04000000L^ W ;\n
Run Code Online (Sandbox Code Playgroud)\n

izl*_*lin 6

我不知道这是否对您有帮助,但我首先计算字节,然后对其中一些进行异或:

\n\n
unsigned int value = 62910759;\nunsigned char a = value >> 24 & 0xFF; // First byte/ high byte\nunsigned char b = value >> 16 & 0xFF;\nunsigned char c = value >> 8 & 0xFF;\nunsigned char d = value & 0xFF; // Last byte/ smallest byte\nprintf("%.2X %.2X %.2X %.2X\\n", a,b,c,d);\n\nunsigned char aXORb = a^b; // a XOR b\nunsigned char bXORc = b^c;\nunsigned char cXORd = c^d;\nunsigned char dXORa = d^a;\n\nprintf("%.2X %.2X %.2X %.2X\\n", aXORb,bXORc,cXORd,dXORa);\n
Run Code Online (Sandbox Code Playgroud)\n\n

在这里尝试一下。

\n\n

输出:

\n\n
03 BF F1 27\nBC 4E D6 24\n
Run Code Online (Sandbox Code Playgroud)\n\n

注意:我认为 uint8_t 会更像“C”,但无论如何结果都是一样的。

\n\n

@Jimbo Jones 这是最后一步。零是不必要的,但我将它们包括在内是为了更好地理解代码。

\n\n
unsigned int result = (0x00 << 24) + (aXORb << 16) + (cXORd << 8) + 0x00;\nMethod(0x02000000L^ result);\n
Run Code Online (Sandbox Code Playgroud)\n\n

如果您的意思是 W = (0, a0 \xe2\x8a\x95 a1,a2 \xe2\x8a\x95a3,0) ,则前 8 位为 0,接下来的 8 位为 XOR b,依此类推。

\n