我正在通過一個小的C文件進行xor解碼,並且遇到了endianness的問題......我有點卡住瞭如何解決它們。這真的是我第一次用C中的按位運算玩這個。用不同的密鑰大小和字節處理異或
如果我使用一個字節的xor鍵並將多個xor編碼值轉換爲uint8_t指針,我的基本代碼就可以正常工作。走每個字節,對着密鑰進行異或運算,然後將結果存儲在解碼的字節數組/緩衝區中,然後將其打印回控制檯。
但是,如果我嘗試一個雙字節異或密鑰,然後endianness開始妨礙。我目前將密鑰放入uint32_t中,因爲我不打算處理大於32位的異或密鑰。在小端系統中,0xc39f
的異或密鑰存儲爲0x9fc3
。如果我一次播放一個字節,要解碼的字節是big-endian,但如果我嘗試一次播放兩個字節(與xor相同的大小),它們也會翻轉爲little-endian )。
我被誘惑到#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
然後用4個字節的指針(uint32_t的):
0xfaadfaa4 0xfab7feb1
我希望針對上述情況,得到的而不是兩個字節指針:
0xa4fa 0xadfa 0xb1fe 0xb7fa
和四字節指針:
0xa4faadfa 0xb1feb7fa
思考?
編輯:任何接受者?目前的答案不足以滿足我的需求。
向我們展示你的代碼? –
代碼有點亂,實際上只是嘗試使用'switch'語句來查看我是在處理1,2或4個字節異或鍵,然後在每個「case」塊中適當地循環。 'case 2'和'case 4'的位實際上就是'printf()'調用來轉儲字節並查看endianness如何影響它們。所以真的沒什麼值得發佈。 – Kumba