我正在通过一个小的 C 文件进行 xor 解码,并且遇到了字节序问题......我对如何解决它们有点困惑。这真的是我第一次在 C 中深入地玩这个按位运算。
如果我使用单字节异或键并将几个异或编码值拾取到 uint8_t 指针中,我的基本代码就可以正常工作。遍历每个字节,将其与键异或,并将结果存储在解码的字节数组/缓冲区中,然后将其打印回控制台。
但是,如果我尝试一个两字节的异或键,那么字节序就会开始妨碍。我目前将密钥插入 uint32_t,因为我不打算处理大于 32 位的异或密钥。在 little-endian 系统上,xor 键0xc39f
存储为0x9fc3
. 如果我一次播放一个字节,要解码的字节是大端的,但是如果我尝试一次播放两个字节(与 xor 键的大小相同),它们也会被翻转为小端)。
我很想#include <byteswap.h>
然后打电话bswap_32()
。但是,虽然这适用于小端,但它可能对大端产生相反的效果。我假设我需要丑陋的#ifdef 仅bswap_32()
用于小端拱门。我认为,必须有一种更便携的方式才能使其工作。
随机样本字符串:
g e n e r a t e
67 65 6e 65 72 61 74 65
Xor 0xc39f
a4 fa ad fa b1 fe b7 fa
如果我用两字节(uint16_t)指针回放异或编码的缓冲区,我会得到这个(通过基本的 printf):
0xfaa4 0xfaad 0xfeb1 0xfab7
并使用四字节指针(uint32_t):
0xfaadfaa4 0xfab7feb1
我希望上面的内容可以改为两字节指针:
0xa4fa 0xadfa 0xb1fe 0xb7fa
和四字节指针:
0xa4faadfa 0xb1feb7fa
想法?
编辑:有接受者吗?当前的答案不足以满足我的需求。