0
我試圖將密文(來自AES加密)轉換爲十六進制值。將字符轉換爲十六進制
我用下面的代碼(狀態是密文)的轉換:
foreach(char *v, state) {
printf("%02X", *v);
}
對於這個密文:
'4¥W[™úËj$Ó¶U6
我得到這樣的輸出:
2734FFFFFFA5575BFFFFFF99FFFFFFFAFFFFFFCB6A240BFFFFFFD318FFFFFFB65536
這不是這個密文正確的十六進制格式。我嘗試了所有導致相同結果的其他轉換方法。
編輯: 的foreach代碼:
#define foreach(item, array) \
for(int keep = 1, \
count = 0,\
size = sizeof (array)/sizeof *(array); \
keep && count != size; \
keep = !keep, count++) \
for(item = (array) + count; keep; keep = !keep)
您的值需要是無符號的,否則您擴展了符號位。將'* v'轉換爲'unsigned char'。 – WhozCraig
這個'foreach'宏可能贏得某種最少維護的代碼獎。 – unwind
這是使用宏的一個非常糟糕的方式。除了在定義中至少有一個錯誤 - 「sizeof *(array)',並且在調用它的方式中有一個錯誤 - foreach(char * v,state)',實際上不可能遵循並瞭解你在做什麼。把它寫成一個正常的函數,問題很可能會被揭示(如果不是,那麼你仍然可以輕鬆地調試你的代碼並找到它)。 –